13/02/12 Carácter ! Valores numéricos que se usan para representar caracteres (letras, números, símbolos) usando la tabla Unicode La clase String ! 16 bit en vez de los 7 u 8 bits que ofrece ASCII ! Tipo char Curso de Programación en Java Jesús Montes Sánchez jmontes@fi.upm.es ! Los valores se expresan entre comillas simples: ‘a’, ‘4’, ‘#’ String Generación ! Una serie de caracteres tratados como si fuesen una única en[dad ! Un string puede incluir letras, dígitos y caracteres especiales (+, $,...) ! Hay muchas formas ! Por ahora sólo veremos éstas String s = new String(“hola”); ! Un string es un objeto de la clase String char[] arrayChars = {‘h’,’o’,’l’,’a’}; ! Su valor es inmutable String s = new String(arrayChars); ! Nunca va a cambiar String s = “hola” + “adios”; ! Las constantes de string se escriben entre comillas doble ! “Hola Mundo” Es un objeto Métodos ‘h’ ‘o’ ‘l’ ‘a’ String miString1 = “hola”;! ! Tiene varios: ! de instancia ! de clase ! Los más u[lizados son de instancia String miString2 = “casa”;! miString1 = miString2! ‘c’ ‘a’ ‘s’ ‘a’ ! ! ! ! ! ! ! ! ! charAt() concat() equals() length() replace() substring() toCharArray() toLowerCase() toUpperCase() 1 13/02/12 char charAt(int index) ! Devuelve el carácter indicado por el índice ! Al igual que los arrays la primera posición es la 0 String x = “avion”;! System.out.println( x.charAt(2) );! String concat(String s) ! Devuelve un nuevo string adjuntando el valor del string pasado como parámetro al valor del string actual. String x = “hola”;! System.out.println( x.concat(“ mundo!”) );! boolean equals(String s) ! Devuelve verdadero si el valor del string pasado es el mismo que el actual String x = “hola”;! Comparando Strings ! ¿Qué pasaría si uso == ? ‘h’ ‘o’ ‘l’ ‘a’ String uno = new String(“hola”);! String otro = new String(“hola”);! ! ¿System.out.println(uno==otro);?! System.out.println( x.equals(“HOLA”) );! false! Comparando Strings ! ¿Y con esto? String uno = “hola”;! String otro = “hola”;! ! ¿System.out.println(uno==otro);?! ‘h’ ‘o’ ‘l’ ‘a’ Reserva de constantes de String ! Cada vez que se escribe una constante de String (Ej “hola”) Java comprueba si ya se ha escrito antes y, si ya existe, no crea un objeto nuevo ! Reaprovecha la referencia ! ¿Por qué? ! Eficiencia true! ! Reduce el consumo de memoria ! Sólo ocurre con las constantes de Strings 2 13/02/12 int length() Reserva de constantes de String ! ¿Por qué pasa esto? ! Devuelve el tamaño del String ! ¡Cuidado! en arrays era una variable y aquí es un método String uno = “hola”;! String otro = “hola”;! ! String x = “hola”;! ‘h’ ‘o’ ‘l’ ‘a’ System.out.println( x.length() );! String replace(char old, char new) String substring(int begin, int end) ! Crea un nuevo String con el valor del String actual pero cambiando todas las apariciones del carácter old por las de new ! Devuelve un nuevo String con los caracteres del primero que van desde la posición que comienza en begin hasta los de la posición end String x = “oxoxox”;! System.out.println( x.replace(‘o’,’O’) )! String x =“holamundo”;! System.out.println( x.substring(0,3) );! La salida es: // hola! OxOxOx String toLowerCase() String toUpperCase() char[] toCharArray() ! Devuelve un nuevo String con todos los caracteres en minúsculas o en mayúsculas ! Crea un array de caracteres y convierte el String a un array de chars String x = ‘hola’;! String x = “hola”;! System.out.println( x.toUpperCase() );! char[] arrayDeChars = x.toCharArray();! System.out.println( arrayDeChars[2] );! Imprimiría HOLA 3 13/02/12 Encadenamiento de llamadas StringBuilder String x = "abc"; ! Los Strings son inmutables String y = x.concat("def").toUpperCase().replace('C','x'); ! ¿Y si vamos a hacer muchas operaciones de modificación? ! Vamos a estar creando y destruyendo muchos Strings System.out.println("y = " + y); // La salida sería y = ABxDEF ! Muy ineficiente ! Los objetos StringBuilder son similares a los String ! ges[onan un conjunto de caracteres ! Pero permiten ser modificados sin que se cree y se destruya un objeto cada vez Creación Métodos importantes ! Sólo esta forma ! append StringBuilder sb = new StringBuilder(“abc”); ! charAt ! setCharAt StringBuilder sb = “abc”; // ERROR ! delete ! insert ! reverse ! toString StringBuilder append(String s) char charAt(int index) ! Adjunta el String s al final del StringBuffer actual ! Devuelve el carácter indicado por el índice ! Devuelve una referencia a sí mismo ! Al igual que los arrays la primera posición es la 0 StringBuilder sb = new StringBuilder(“hola”); sb.append(“mundo”); StringBuilder x = new StringBuilder(“avion”);! System.out.println(sb); System.out.println( x.charAt(2) );! 4 13/02/12 void setCharAt(int index,char ch) ! Se cambia el caracter de la posición index al valor almacenado en ch ! Al igual que los arrays la primera posición es la 0 StringBuilder delete(int start,int end) ! Elimina los caracteres desde la posición start hasta la end-­‐1 ! Devuelve una referencia a sí mismo StringBuilder x = new StringBuilder(“avion”);! x.setCharAt(1,’V’);! System.out.println( x);! StringBuilder x = new StringBuilder(“0123456789”);! System.out.println( x.delete(4,6) );! // Devolvería 01236789! // aVion! StringBuilder reverse() StringBuilder insert(int offset, String s) ! Inserta el String pasado en la posición especificada por offset ! Invierte los caracteres ! Devuelve una referencia a sí mismo ! Devuelve una referencia a sí mismo StringBuilder sb = new StringBuilder(“01234”);! StringBuilder sb = new StringBuilder(“01234”);! sb.insert(3,”-”);! System.out.println(sb);! sb.reverse();! // Devolvería 012-34! System.out.println( sb);! // Devolvería 43210 String toString() ! Devuelve un String con los caracteres del StringBuffer StringBuilder sb = new StringBuilder(“test”);! String s = sb.toString();! System.out.println( s);! 5