Strings en Java String es una clase, no un tipo primitivo. Las variables de tipo String, en cualquier instante, pueden contener: Manejo básico de cadenas de caracteres y archivos de texto en Java Un String (ej. “Hola”, “11/11/2011”, “123”, “”, etc. ) El valor null (cuando la variable no contiene un String). Prof. Franco Guidi Polanco, Ph.D. Observaciones: Escuela de Ingeniería Industrial Pontificia Universidad Católica de Valparaíso, Chile [email protected] Cuando se instancia un arreglo de String, sus posiciones se incializan automáticamente en null. El valor null puede ser asignado a cualquier variable String. Franco Guidi Polanco Valor null 28-11-11 Método equals Para saber si una variable de tipo String contiene el valor null: Para saber si una variable de tipo String (no null) contiene un determinado texto, debemos usar el método equals sobre la variable: String x; String x; //Aquí x puede o no recibir un valor ... //Aquí x recibe un valor ... if( x == null ) System.out.println(“No contiene String”); else System.out.println(“Sí contiene String”); if( x.equals(“Esternocleidomastoideo”) ) System.out.println(“Igual”); else System.out.println(“Distinto”); Franco Guidi Polanco 2 28-11-11 3 Franco Guidi Polanco 28-11-11 4 Método equals Método equals Para establecer si dos variables String (no null) contienen el mismo valor: Para establecer si dos variables String (no null) contienen valores distintos, se niega el resultado del método equals: String x, y; String x, y; //Aquí x e y reciben valores ... //Aquí x e y reciben valores ... if( x.equals( y ) ) System.out.println(“Igual”); else System.out.println(“Distinto”); if( ! x.equals( y ) ) System.out.println(“Distintos”); else System.out.println(“Iguales”); Franco Guidi Polanco 28-11-11 5 String x, y; String x = “Esternocleidomastoideo”; String y = “EsternocleidoMastoideo”; Franco Guidi Polanco 28-11-11 6 Para aplicar cualquiera de los métodos anteriores sobre una variable, es necesario que ésta no sea null. Para verificar esta condición: El método equals distingue entre mayúsculas y minúsculas. Si no deseamos hacer distinción entre mayúsculas y minúsculas debemos utilizar el método equalsIgnoreCase. if( x.equalsIgnoreCase( y ) ) System.out.println(“Iguales”); else System.out.println(“Distintas”); 28-11-11 Métodos no deben ser invocados sobre variables que contengan null. Método equalsIgnoreCase if( x.equals( y ) ) System.out.println(“Iguales”); else System.out.println(“Distintas”); Franco Guidi Polanco //Aquí x e y ... pueden o no recibir un valor if( x != null ) if( x.equals( y ) ) System.out.println(“Igual”); ... // o en forma alternativa (en este orden): if( x != null && x.equals( y ) ) System.out.println(“Igual”); Distintas Iguales 7 Franco Guidi Polanco 28-11-11 NOTA: No es problema que variable y sea null. 8 Métodos útiles de la clase String Métodos útiles de la clase String public String substring(int beginIndex, int endIndex): retorna una porción de un String, delimitada por subíndices de posición de sus caracteres. Ejemplo: public String trim(): retorna un String con el mismo contenido, pero con el espacio inicial y final eliminado. String queja = “ odio el espacio que me rodea System.out.println( “(” + queja + “)” ); String nombre = “Nogatongamegalosomanjarchafafrinilofo”; String parte= nombre.substring( 2, 5 ); System.out.println( parte ); ( gato 28-11-11 ) String solución = queja.trim(); System.out.println( “(” + solución + “)” ); Nota: el primer caracter ocupa la posición 0. Franco Guidi Polanco odio el espacio que me rodea ” ; (odio el espacio que me rodea) 9 Métodos útiles de la clase String Franco Guidi Polanco 28-11-11 10 Métodos útiles de la clase String public String replaceAll(String regex, String reemplazo): retorna un String que reemplaza las porciones que coinciden con regex, por el String de reemplazo. public String[] split(String regex): retorna un arreglo de Strings que contiene en cada posición una porción del String original, considerando como divisor a regex. String dato = “LA CASA DEL CASADO” ; String otroDato = dato.replaceAll( “AS”, “OL” ); System.out.println( otroDato ); String familia = “Juan;Ana;Camila” ; String[] personas = familia.split(“;”); System.out.println( personas[0] ); System.out.println( personas[2] ); LA COLA DEL COLADO Juan Camila Franco Guidi Polanco 28-11-11 11 Franco Guidi Polanco 28-11-11 12 Secuencias de escape Ejemplos de secuencias de escape El backslash (“\”) se utiliza dentro de de String literales para iniciar secuencias de escape. System.out.println(“Hola\nqué\ntal”); Hola qué tal Secuencias de escape importantes: System.out.println(“Esto es \”realmente\” útil”); “\n”: cambio de línea “\t”: tabulación “\’” : comilla simple “\””: comilla dobe “\\”: backslash Esto es “realmente” útil System.out.println(“Carpeta: c:\\tareas\\progamación”); Carpeta: c:\tareas\programación Franco Guidi Polanco 28-11-11 13 Archivos de texto Franco Guidi Polanco 28-11-11 14 Archivos de texto v/s archivos con formato Documentos en disco que contienen caracteres. Útiles para ingreso masivo de datos, guardar resultados o mantener datos simples en forma persistente. Operaciones que estudiaremos: Consultar si un archivo existe Leer un archivo existente Crear un archivo nuevo Las clases involucradas se encuentran dentro del package java.io y generan excepciones del tipo IOException. Franco Guidi Polanco 28-11-11 Archivo de texto (plano) 15 Franco Guidi Polanco 28-11-11 Archivo con formato 16 Para consultar la existencia de un archivo Lectura de datos de una archivo de texto Por ejemplo, para saber si existe el archivo: c:\documentos\datos.txt Lectura de un archivo línea a línea (por ejemplo, del archivo llamado “datos.txt” ) : File archivo = new File( “c:\\documentos\\datos.txt” ); if ( archivo.exists() ) System.out.println(“El archivo existe”); else System.out.println(“El archivo no existe”); Nota: El “\” debe escribirse doble (“\\”) dentro de las cadenas de texto literales. Franco Guidi Polanco 28-11-11 17 Escritura de datos de una archivo de texto Para generar un nuevo archivo (por ejemplo, “datos.txt” ): BufferedWriter out = new BufferedWriter(new FileWriter( “datos.txt” )); out.write( “Esto ” ); out.write( “es ” ); out.write( “la primera línea” ); out.newLine(); //Hace un cambio de línea out.write( “Y esto ” ); out.write( “es la segunda línea” ); out.close(); Franco Guidi Polanco Esto es la primera línea Y esto es la segunda línea 28-11-11 19 BufferedReader in = new BufferedReader( new FileReader(“datos.txt”)); String linea; while ((linea = in.readLine()) != null) { System.out.println(linea); } in.close(); Si el archivo no existe o hay otro problema durante la lectura, se generará una IOException. Franco Guidi Polanco 28-11-11 18