Ejercicios cadenas resueltos

public static void main(String[] args) {
		// Escribir una función que invierta el orden de los caracteres 
		// de una cadena dada. invertir("hola")–>"aloh"
		String alreves=invertirCadena("cacahuete");
		System.out.println(alreves);
		if (esPalindromo("Isaac no ronca así")) {
			System.out.println("Es palindromo");
		}
		
		System.out.println(quitarAcentos("áéíóúàèìòùäëïöü"));
		// Saber si una cadena es un palíndromo
		// Se lee lo mismo al derecho que al revés
		// dabalearrozalazorraelabad
		// dabalearrozalazorraelabad
		// Sé dar la vuelta: Lo acabo de hacer
		// Sé quitar espacios: replace(" ", "")
		
		
		// quitar acentos que nos sustituya vocales acentuadas
		// por vocales sin acento
		// puedo reemplazar cada vocal acentuada por la sin acentuar
		
		
		// Tengo un problema: hay que encontrar el algoritmo
		// ¿Cómo lo hago yo?
		// Divide y vencerás: El problema grande se convierte
		// En problemas más pequeños
	}
	
	public static String quitarAcentos(String cadena) {
		String acentos="áéíóúàèìòùäëïöü";
		String sinacentos="aeiou";
		for(int i=0;i<acentos.length();i++) {
			cadena=cadena.replace(acentos.charAt(i),
					sinacentos.charAt(i%5)); // Aritmética modular
		}
		
		return cadena;
	}
	public static boolean esPalindromo(String cadena) {
		cadena=cadena.replace(" ","");
		cadena=quitarAcentos(cadena);
		return cadena.equalsIgnoreCase(invertirCadena(cadena));
	}
	public static String invertirCadena(String cadena) {
		// cacahuete -> eteuhacac
		// empiezo por el final, voy letra a letra y escribo cada letra
		// ¿Se empezar e ir letra a letra? Sí con un for
		// Se añadir esas letras a un resultado: sí, concatenando
		String res="";
		for(int i=cadena.length()-1;i>=0;i--) {
			res+=cadena.charAt(i);
		}
		return res;
	}

Strings en Java

// Definir cadenas
		String nombre="Ana";
		String departamento="marketing";
		System.out.println(nombre+" "+ departamento);
		nombre="Eva";
		System.out.println(nombre+" "+ departamento);
		// Estas tres cadenas valen lo mismo
		String alumno1="Ana";
		String alumno2=alumno1;
		String alumno3="Ana";
		Scanner sc=new Scanner(System.in);
		String alumno4=sc.next();
		if (alumno1==alumno2) {
			System.out.println("Alumno 1 es igual al 2");
		}
		if (alumno1==alumno3) {
			System.out.println("Alumno 1 es igual al 3");
		}
		if (alumno1==alumno4) {
			System.out.println("Alumno 1 es igual al 4");
		}
		// Todo este rollo es para que enendáis que si quiero
		// comprobar que dos cadenas son iguales
		// Tengo que usar equals
		if (alumno1.equals(alumno4)) {
			System.out.println("Alumno 1 es igual al 4");
		}
		
		// en un tipo primitivo el nombre es una caja
		// En la que meto el valor
		int edad=5;
		
		//En los que no son primitivos (casi todos)
		// El nombre es una caja donde está la
		// posición de memoria donde está el valor
		String aula="Mates";

		System.out.println("Dime tu ciudad");
		String ciudad=sc.next();
		// Comprobar si una cadena es igual a otra
		// siempre uso equals
		if (ciudad.equals("barcelona")) {
			System.out.println("Eres de Barcelona");
		}
		// length es una de las muchas funciones
		// de la clase string
		System.out.println(ciudad.length());
		
		// charAt(posicion) el caracter en esa posición
		String referencia="ABCDE";
		System.out.println(referencia.charAt(0)); // La A
		// Esto me recorre todas las letras de la cadena
		for (int i=0;i<referencia.length();i++) {
			System.out.println(referencia.charAt(i));
		}
		
		System.out.println(referencia.charAt(referencia.length()-1));// Último caracter
		
		for (int i=0;i<referencia.length();i++) {
			System.out.println(referencia.charAt(referencia.length()-i-1));
		}
		// Obtener subcadenas de una cadena
		// substring(int beginIndex, int endIndex)
		for (int i=0;i<referencia.length();i++) {
			System.out.println(referencia.substring(i));
		}
		for (int i=0;i<referencia.length();i++) {
			System.out.println(referencia.substring(0,i+1));
		}
		
		// Buscar una cadena dentro de otra
		// Si la encuentra nos devuelve la posición
		// Si no la encuentra nos devuelve -1
		
		String quijote="En un lugar de la mancha de cuyo nombre no quiero acordarme";
		System.out.println(quijote.indexOf(" mancha")); // 18
		System.out.println(quijote.indexOf("messi")); // -1 porque no lo ha encontrado
		System.out.println(quijote.indexOf("de")); // 12
		System.out.println(quijote.indexOf("de",13)); // 25
		int pos1=quijote.indexOf("de"); //12
		int pos2=quijote.indexOf("de", pos1+1); //25
		
		// Me busca todas las apariciones de la cadena buscar
		// Dentro de quijote
		String buscar="de";
		int pos=quijote.indexOf(buscar);
		while(pos!=-1) {
			System.out.println(pos);
			pos=quijote.indexOf(buscar, pos+1);
		}
		
		// Reemplazar una cadena por otra
		// replace(CharSequence target, CharSequence replacement)
		
		String censura=quijote.replace("mancha", "###");
		System.out.println(censura);
		String noespacios=quijote.replace(" ", "");
		System.out.println(noespacios);
		
		// Convertir a mayúsculas y a minúsculas
		// toUpperCase() y toLowerCase()
		
		System.out.println(quijote.toUpperCase());
		System.out.println(quijote.toLowerCase());
		ciudad="  barcelona";
		if (ciudad.trim().toLowerCase().equals("barcelona")) {
			System.out.println("Eres de Barcelona");
		}
		if (ciudad.equalsIgnoreCase("barcelona")) {
			System.out.println("Eres de Barcelona");
		}
		ciudad.endsWith("a"); //Acaba en la letra a
		ciudad.startsWith("a"); // Empieza con a
		ciudad.trim(); // Elimina los espacios del principio y del final