La Clase String Un objeto String tiene la cualidad de ser un objeto que no cambia (inmutable) . Esto quiere decir que una vez que es instanciado, no puede cambiar su estado. Por ejemplo en el siguiente código: String unaCadena = " Instituto Nobel "; unaCadena.trim(); //método para acortar los espacios System.out.println(unaCadena); La cadena no ha cambiado. Si quisiéramos que “cambie”, debemos hacer lo siguiente: String unaCadena = " Instituto Nobel unaCadena = unaCadena.trim(); System.out.println(unaCadena); "; En realidad lo que estamos haciendo ahora, es usar una copia del objeto y modificándolo Pero habremos usado dos objetos para lograr esto. Sin embargo hay alguna que otra excepción. Por ejemplo cuando se concatenan varios literales o constantes con el operador +, el compilador es suficientemente inteligente para crear un solo objeto String. Ejemplo: public class EjemploString { public static void main(String[] args) { final String ESPACIO = " "; String s = "Hola" + ESPACIO + "Mundo"; } } En resumen: • • • Si el texto no va a cambiar: String Si el texto puede cambiar y sólo vamos a tener un hilo trabajando con la cadena: StringBuilder. Si el texto puede cambiar y vamos a tener más de un hilo trabajando con la cadena: StringBuffer. ¿Cuál es la diferencia entre un StringBuilder y un StringBuffer? La diferencia entre un StringBuilder y un StringBuffer es que un StringBuffer provee métodos sincronizados por lo que es seguro usarlos en un ambiente multi-hilos. Los métodos son sincronizados donde sea necesario, para que las operaciones en cualquier instancia de un StringBuffer puedan comportarse como si ocurrieran en serie de manera consistente con el orden de las llamadas a los métodos hechas por cada hilo. Generalmente es más común el uso de StringBuilder. Usar StringBuffer en un ambiente de un solo hilo de ejecución no tiene sentido, y al tener métodos sincronizados, es más lenta en general. Ejemplos: // creamos un StringBuffer vacío StringBuffer sb = new StringBuffer(); // el tamaño va aumentando a medida que vayamos añadiendo caracteres // el método append convierte automáticamente cualquier tipo en String (llamando al método toString()) sb.append("Esto es una prueba"); // también podemos insertar en una posición determinada sb.insert(4, " no"); // sb = "Esto no es una prueba" // o borrar trozos de la cadena sb.delete(4, 11); // sb = "Esto prueba" // es posible hacer esto también sb.append("Esto ").append("es ").append("una prueba"); public class StringBuilderDemo { public static void main(String[] args) { String palindrome = " Somos o no somos"; StringBuilder sb = new StringBuilder(palindrome); sb.reverse(); // revertirlo System.out.println(sb); } } Usando recursos string con Android Se pueden cargar strings desde el archive de recursos en Android, por ejemplo puede cargar el nombre de la aplicación desde un string almacenado en un recurso: String strAppName = getResources().getString(R.string.nombre_aplicacion); Para poder realizer esto tendremos que tener en /res/values un archive llamado /res/value/strings.xml definido de la siguiente manera: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="nombre_aplicacion">Curso de Android Instituto Nobel!</string> </resources> Esta técnica es especialmente utilizada en las aplicaciones que dan la posibilidad de ser utilizadas en distintos idiomas. Iteración de cadena simple Veamos las funciones disponibles dentro de la clase String. Es útil saber que una variable del tipo string puede ser recorrida carácter a carácter con un ciclo For o While para ello usamos el método length de la clase string, y para saber cual es el carácter según su índice podemos usar charAt. Además podemos saber la posición de una letra con palabra.indexOf(letra, pos); Mayúsculas y Minúsculas String enMayusculas = tucadena.toUpperCase(); String enMinusculas = tucadena.toLowerCase(); Splitting Se utiliza para obtener una lista de subcadenas dentro de una cadena. String colores = "Rojo Anaranjado Amarillo Verde Azul Marron"; String aColores[] = colores.split(" "); El array obtenido es el siguiente: aColors[0]=Rojo aColors[1]=Anaranjado aColors[2]=Amarillo aColors[3]=Verde aColors[4]=Azul aColors[5]=Marron Comparación Simple Para comparar cadenas usamos el método compareTo() el cual es case sensitive, es decir que tendrá en cuenta mayúsculas y minúsculas. String vocales = "AEIOU"; if(vocales.compareTo("AEIOU") == 0 || vocales. compareToIgnoreCase ("aeiou")== 0) ) { // las cadenas coinciden } else { // las cadenas no coinciden ! } Búsqueda Simple Si deseamos saber si una subcadena está contenida en una cadena hacemos lo siguiente: String vocales = "AEIOU"; if( vocales.contains("IOU")==true ) ….. Uso de indexOf y substring El método indexOf devuelve la primera aparición de una cadena dentro de un String. Si le pasamos dos parámetros el primero será la cadena a buscar y el segundo la posición en la que empezará a buscar. El método substring devolverá una subcadena del String, desde la posición de inicio hasta la posición de fin. Si sólo se especifica un parámetro la subcadena contendrá desde la posición de inicio hasta el final de la cadena Ejemplo: String colores = "rojo,amarillo,verde,azul,morado,marrón"; int inicio = colores.indexOf(","); int fin = colores.indexOf(",", inicio + 1); System.out.println(colores.substring(inicio + 1, fin)); System.out.println(colores.substring(inicio)); La salida será: amarillo amarillo,verde,azul,morado,marrón Uso valueOf Este método obtiene el valor y lo convierte al tipo de dato indicado, por ejemplo: integer.valueof(a); donde a podría ser un caracter la funcion devuelve su valor en entero String.Valueof(s) ; donde s es un entero Y la funcion devuelve cadena Ejercicio Práctico “El ahorcado” Cargar una lista de palabras en un array, la cantidad que deseen. Obtener una palabra con una búsqueda aleatoria. Armar un variable con tanta cantidad de *(o el símbolo que deseen ) como letras tenga la palabra aleatoria encontrada. Ingresar una letra y ver si se corresponde con alguna/s letra/s de la palabra aleatoria y remplazarla en la variable con asterisco en el/los lugares correspondiente/s. Contar la cantidad de intentos y la cantidad de errores; se finaliza el juego cuando se cometen 6 errores, o cuando se descubre la palabra. Como mostrar un popup en android durante un tiempo: Toast.makeText(getApplicationContext(), "Fin del Juego", Toast.LENGTH_LONG).show(); Depurando con Log import androi.util.Log; ... Log.d("MiEtiqueta", "Se ha realizado la acción X"); Ayuda: pueden usar estas palabras: “MARIPOSA","LAGUNA","REVERBERANTE","ALMOHADA","BARROCO","CASCADA", "ALBORES","GIRASOL","NOGAL","SALAMANDRA","SOMBRIO","CLAUSTRO","ANZUELO", "ALUMINIO","CARACOL","MANDARINA","SERENIDAD","ALMOHADA","CLARINETE", "SONRISA","FASCINANTE","ATARDECER","LUSTRO","CABALLERIA","ANDALUZ","PERGAMINO", "ALEVOSIA","SUGESTIVO","CHOCOLATE","TEMPESTAD","MILAGRO","COCHE", "SUTIL","CIELO","CARACOLEAR","ESPACIO","PLURAL","BOREAL","ILOGICO", "DESINHIBIDOR","LIBIDO","OBVIAMENTE","DUENDE","NATURALMENTE","CONSTIPADO","PULCRO","SENSATEZ","ESTUDIAR","CRI ATURA","VIVIR","MUNDO","MARAVILLA","FORTUNA","ACOMODAR","GENERO","VIDA","NACIDO","EJEMPLO","DESTINADO","VOL AR","PARTIR","ACOMODAR","PERFECTO","ESTE","FIN","AVE","LIGERO","POSIBLE","VOLUMINOSO","PULMONES","AIRE","GRANDE ","ESPACIO","HUECO","HUESOS",“EXTREMO","FUERTE","COMPARADO","PESO","FORMA","CUERPO","AFILADO","DELANTE","PRO VISTO","SUAVE","PROPOSITO","VUELO","PLUMA","RESPONDER","ADMIRABLE","FIN","CREADAS","HALLAR","MARAVILLOSAMENT E","ENGRASADAS","AGUA","DESCENDER","AVE","PESO","MUSCULOS","UTILIZAR","VUELO",”ENORME","PROPORCION","PESO","T AMAÑO","CUERPO","ESTAR","DISPUESTO","MAYOR","RENDIMIENTO","EFECTIVO","MENOR","ESFUERZO","POSIBLE"