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