package POO;

import java.util.Date;

public class StringPractica {

    public static void main(String[] args) {
        //String cadena1 = new String("Andrés"); // Constructor.

        //String cadena = "pepito"; // Java nos ayuda con este atajo (sin utilizar el constructor)


        //cadena = "juanito"; // (Los literales no pueden cambiar cuando se crean.) No son mutables.

        //- MÉTODOS.

        String cadena = "Esto es una frase generada por Alejandro y Alberto.";

        //1. Obten la 7ª letra del String cadena
        /*char caracter = cadena.charAt(6);
        System.out.println("El caracter 7º de "+caracter+" es " +caracter);*/

        //2. Obtén la longitud total del String cadena
        //¿Qué espero que me devuelvan? int
        /*int longitudTotal = cadena.length();
        System.out.println("La longitud de cadena "+cadena+ " es "+longitudTotal);*/

        //3. Muestra todas las letras de una cadena separadas por un salto de línea.

        /*for (int i = 0; i < cadena.length(); i++) {
            System.out.println(cadena.charAt(i));
        }*/

        //3.1 Reemplaza *manualmente* el caracter 'a' por '*', dando al final como resultado, una cadena sin 'a' y con '*'
        /*String cadenaNueva = "";
        for (int i = 0; i < cadena.length(); i++) {
            if (cadena.charAt(i) == 'a'){
                cadenaNueva+= '*';
                //cadenaNueva = cadenaNueva + "*";
                //System.out.println("entro aquí");
            }else{
                cadenaNueva+=cadena.charAt(i);
            }
            System.out.println("Nuevo caracter "+cadenaNueva.charAt(i));
        }*/
        //System.out.println(cadenaNueva);
        //3.2. Realiza el mismo algoritmo que el ejercicio anterior pero sin tener en cuenta si se trata de mayúscula o minúscula.
        /*String cadenaNueva = "";
        for (int i = 0; i < cadena.length(); i++) {
            if (cadena.charAt(i) == 'a' || cadena.charAt(i) == 'A') {
                cadenaNueva += '*';
                //cadenaNueva = cadenaNueva + "*";
                //System.out.println("entro aquí");
            } else {
                cadenaNueva += cadena.charAt(i);
            }
            System.out.println("Nuevo caracter " + cadenaNueva.charAt(i));
        }
        System.out.println(cadenaNueva);*/


        //3.3 Dado un array de carácteres, si la cadena contiene alguno de esos carácteres reemplazalo por la constante NUEVA_LETRA.

        /*char[] caracteres = {'a', 'r', 's', 'b', 'e'};
        final char NUEVA_LETRA = '%';
        String nuevaCadena = "";

        for (int i = 0; i < cadena.length(); i++) {
            boolean estaCaracter = false;
            for (int j = 0; j < caracteres.length; j++) {

                if (caracteres[j] == cadena.charAt(i)) {
                    estaCaracter = true;
                }
            }
            if (estaCaracter) {
                nuevaCadena += NUEVA_LETRA;
            } else {
                nuevaCadena += cadena.charAt(i);
            }
        }

        System.out.println("La nueva cadena es: "+nuevaCadena);*/

        //Método proprocionado por String.
        /*String nuevaCadena = cadena.replace("a", "*").replace("b", "*").replace("c", "*");
        System.out.println(nuevaCadena);*/

        //4. Extra un substring de la posición 6 a las 20.
        /*String cadenaNueva = cadena.substring(31,40);
        System.out.println(cadena.substring(31,40));*/

        //5. Convierte la variable cadena a mayúsculas.
        //String cadenaNueva = cadena.toUpperCase();
        //System.out.println(cadenaNueva);

        //6. Convierte la variable cadena a minúsculas.
        /*String cadenaNueva = cadena.toLowerCase();
        System.out.println(cadenaNueva);*/

        //7. Elimina los espacios en blanco el inicio y final de nombre.
        /*String nombre = "     ALBERTO    ";
        String nuevoNombre = nombre.trim();
        System.out.println(nuevoNombre);*/

        // Comparaciones selectivas (De menos selectivas a más)
        //8.1 Comprueba si cadena empieza por "Esto".
        /*if (cadena.startsWith("Esto")){
            System.out.println("Cumple la condición");
        }else{
            System.out.println("No cumple la condición");
        }
        //8.2 Comprueba si cadena termina en Alberto.
        if (cadena.endsWith("Alberto.")){
            System.out.println("Cumple la condición");
        }else{
            System.out.println("No cumple la condición");
        }
        //8.2 Compara si dos cadenas son iguales
        if (cadena.equals(cadena)){
            System.out.println("Son dos cadenas iguales");
        }else {
            System.out.println("No son dos cadenas iguales");
        }
        //8.3 Compara si dos cadenas son iguales ingornando la capitalización.
        if (cadena.equalsIgnoreCase(cadena.toLowerCase())){
            System.out.println("Son dos cadenas iguales");
        }else {
            System.out.println("No son dos cadenas iguales");
        }*/

        //9 Divide un String en array de string con un delimitador.
        //"Esto es una frase";
        /*String[] cadenaNueva = cadena.split(" ");
        for (int i = 0; i <cadenaNueva.length ; i++) {
            System.out.println(cadenaNueva[i]);

        }*/

        // MUTABLE VS NOMUTABLE

        //STRING => INMUTABLE
        /*String cadena1 = "";
        Date fechaAntes = new Date();

        for (int i = 0; i < 200000; i++) {
            cadena1+="+";
        }
        Date fechaDespues = new Date();
        System.out.println("Tiempo que ha tardado "+(fechaDespues.getTime()-fechaAntes.getTime()));*/

        //STRING BUILDER => MUTABLE
        /*StringBuilder cadena1 = new StringBuilder();
        Date fechaAntes = new Date();

        for (int i = 0; i < 200000; i++) {
            cadena1.append("+");
        }
        Date fechaDespues = new Date();
        System.out.println("Tiempo que ha tardado "+(fechaDespues.getTime()-fechaAntes.getTime()));*/


        //¿Que soluciones planteas para reemplazar los delimitadores de palabras?
        //Quiero que los intros pasen a ser "###" y los espacios sean espacios normales y no '-'


        String cadenaOriginal = "En-un-lugar-de-la-Mancha,-de-cuyo-nombre-no-quiero-acordarme,-no-ha-mucho-tiempo-que-vivía-un-hidalgo-de-los-de-lanza-en-astillero,-adarga-antigua,-rocín-flaco-y-galgo-corredor.\n" +
                "Una-olla-de-algo-más-vaca-que-cordero,-salpicón-las-más-noches,-duelos-y-quebrantos-los-sábados,-lantejas-los-viernes,-algún-palomino-de-añadidura-los-domingos,-consumían-las-tres-partes-de-su-hacienda.\n" +
                "El-resto-della-concluían-sayo-de-velarte,-calzas-de-velludo-para-las-fiestas,-con-sus-pantuflos-de-lo-mismo,-y-los-días-de-entresemana-se-honraba-con-su-vellorí-de-lo-más-fino.";

        //3 SOLUCIONES ALTERNATIVAS
        // 1. Replace.
        // 2. Split
        // 3. Recorriendo cada caracter en bucle...

    }
}
