Buenos dias, como os dije hoy pondría la Parte III, la cual trata principalmente sobre la clase String de Java, al idéntico que sus métodos mas significativos y los que suelen entrar en el examen de certificación. Digo ya de antemano que es un post largo, pero tiene explicaciones breves de cada método y algunos ejemplos de las salidas o valores que retornan. Dicho esto podemos ponernos manos a la obra: El meta principal de esta fracción es construir código que usen el operador de concatenación y los próximos métodos de la clase String: charAt, indexOf, trim, substring, replace length, startsWith, endsWith. La clase String se usa mucho en el lenguaje de programación Java. En esta fracción discutiremos que es un String, como concatenar String separados y tambien detallaremos métodos. Una vez que veamos esta fracción entenderemos completamente que es una clase String y como ir trabajando con ella. Strings String concatenation Operator Methods of the String Class Strings Los strings son objetos que representan cadenas de caracteres de 16-bit Unicode. Son objetos inmutables, en el sentido de que su valor jamás cambia. Por ejemplo, el próximo texto: ?Dead Men Tell No Tales? puede ser creado como String: String quote="Dead Men Tell No Tales": En el sigueinte ejemplo, el valor de la cadena no varía después de que el método retorne un valor modificado. Recuerda que los String son inmutables. Aquí invocaremos el método replace en quote. De nuevo, se retorna un nuevo String, pero no varía el valor: quote.replace("No Tales", "Tales"); System.out.println(quote); //Para que el valor de quote cambiara, habría que realizarlo así //Asignando el valor de retorno a la variable quote. quote=quote.replace("No Tales", "Tales"); System.out.println(quote); Podemos crear String de muchas maneras. Podemos instanciar un objeto, o podemos desarrollar un objeto y asignandole una variable de referencia. Como recordatorio, una variable de referencia mantiene el valor de destino. Vamos a ver algunos de las cosas que podemos realizar con la clase String. Podemos crear una cadena sin asignar un objeto String. Asegúrate siempre de asignarle un valor, o tendrás yerros de compilación. String quote1; //quote1 es una referencia a una variable sin ningún objeto String asignado quote1="Ahow Matey"; //Asigna un objeto String a la variable de referencia Podemos usar tambien distintos enfoques para crear objetos de tipo String. String quote2a=new String(); //quote2a es una variable de referencia String quote2b=new String(""); //Equivalente a lo previo Tambien podemos crear un objeto String sni usar un constructor: String quote3="The existence of the sea means the existence of pirates! ? Malayan Proverb"; O podemos crear un objeto String entretanto se usa un constructor: String quote4=new String("Yo hoho!"); Puedes crear una variable de referencia que se refiere a otra variable de referencia de un objeto String: String quote5="You're welcome to my Gold --William kidd."; String quote6=quote5; Tambien podemos asignar un nuevo Objeto String a una variable de referencia de tipo String: String quote7="The treasure is in the sand."; //Asigna un String; quote7="The treasure is between the rails."; // Asigna un nuevo String The String concatenation Operator El operador de concatenación de cadenas de caracteres (+) une algúnas cadenas conjuntamente. + String Concatenation Operator El operador de concatenación en Java une 2 Strings de forma muy fácil. Por ejemplo, ?doub? + ?loon? es idéntico a ?doubloon?. Vamos a verlo en código: String item="doubloon"; String question="What is a " + item + "?"; System.out.println("Question: " + question); La linea 2 reemplaza la variable item con un contenido, ?doubloon?, por lo cual el String question se convierte en ?What is a doubloon?? La linea 3 reemplaza la variable question con su contenido e imprime en pantalla: ?Question: What is a doubloon??. The toString Method La clase Object tiene un método que retorna la representación String del objeto. Este método se llama toString. Todas las clases Java heredan de la clase Object por defecto, por lo tanto todas las clases heredan este método. Cuando creamos una clase, la práctica ams habitual es realizar override al método toString para retornar la información que mejor represente el estado del objeto. El método toString hace un uso general del operador de concatenación de String. Vamos a ver la clase TreasureMap con el método toString con override: public class TreasureMap { private String owner="Blackbeard"; private String location="Outer Banks"; public String toString(){ return "Map Owner: " + this.owner + ", treasure location: " + this.location; Aquí, el método toString retorna el contenido de las variables instanciadas de la clase: public static void main(String[] args){ TreasureMap map = new TreasureMap(); System.out.println(map); La salida en pantalla es: ?Map Owner: Blackbeard, treasure location: Outer Banks? La concatenación puede dar unr esultado inesperado si estamos incluyendo variables que inicialmente no eran Strings: Respetando que poseemos 2 String y 2 integer: String title1=" shovels."; String title2 = "Shovels: "; int floatShovels=5; int roundPointShovels:6; El compilador realiza una asociación de izquierda a derecha para la adición y la concatenación. Para los próximos 2 sentencias, los 2 enteros se han sumado entre ellos. A continuación, el operador de concatenación coge la repersentación toString y lo concatena con la otra cadena: //Imprime '11 shovels' System.out.println(floatShovels + roundPointShovels + title1); //Imprime '11 shovels' System.out.println((floatShovels + roundPointShovels)+title1); Ahora en este ejemplo siguiente, el compilador moviendose de izquierda a derecha, toma la String title2 y la une con la representación de la cadena de floatShovels. El fruto es un String. Ahora este fruto de la unión se une a la representación en string d ela variable roundPointShovels: //Imprime 'Shovels: 56' System.out.println(title2 + floatShovels + roundPointShovels); El parentesis coge precedencia, por lo que podemos sumar los valores enteros de las variables con el String //Imprime 'Shovels: 11' System.out.println(title2 + (floatShovels+roundPointShovels)); Methods of the String Class Hay una mayor multitud de métodos referentes a la clase String y se usan comúnmente. Los métodos mas comunes son charAt, indexOf, length, replace, substring, startsWith, endsWith y trim. charAt(int) : char endsWith(String) : boolean indexOf(int) : int indexOf(int, int) : int indexOf(String) : int indexOf(String,int) : int length() : int replace(char,char) : String replace(CharSequence, CharSequence) : String startsWith(String, int) : boolean startsWith(String) : boolean substring(int) : String substring(int, int) : String trim() : String Ahora veremos una descripción mas detallada sobre cada método, seguidos de sus declaraciones y de sus ejemplos. Primero tomaremos como String de prueba lo siguiente: String pirateMessage=" Buried Treasure Chest! "; La cadena tiene 2 lugares blancos al origen y un lugar en blanco al final, para poder probar los métodos mejor. h4 The charAt method El método charAt retorna un valor char en la posición especificada por un int en un objeto String: La declaración del método charAt sería la siguiente: public char charAt(int index) { Ejemplos: //Retorna el lugar blanco en la posición 0 char c1=pirateMessage.charAt(0); //Retorna el caracter B en la posición 2 char c2=pirateMessage.charAt(2); //Retorna el caracter ! de la posición 23 char c3=pirateMessage.charAt(23); //Retorna el lugar blanco de la posición 24 char c4=pirateMessage.charAt(24); The indexOf Method El método indexOf de la clase String retorna un valor de tipo int representando el index del caracter o string en un objeto String. Hay 4 declaraciones posibles: public int indexOf(int ch){ public int indexOf(int ch, int fromIndex){ public int indexOf(String str){ public int indexOf(String str, int fromIndex){ Ejemplos: //Retorna el entero 3 que es la primero 'u' en la cadena int i1=pirateMessage.indexOf('u'); //Retorna el entero 14 que es la primero 'u' a dividir de la posición 9 int i2 = pirateMessage.indexOf('u',9); //Retorna el entero 13 como el espacio donde empieza el string dado int i3 = pirateMessage.indexOf("sure"); //Retorna el entero .1 ya que no hay string Treasure a dividir de la posición 10 int i4 = pirateMessage.indexOf("Treasure",10); //Retorna el entero -1 ya que no hay caracter 'u' en la posición 100 o luego int i5 = pirateMessage.indexOf('u',100); The length Method El método length de la clase String retorna un valor de tipo int representando la extensión de la cadena en un objeto String: Hay una declaración posible: public int length(){ Ejemplos: //Retorna la extensión de la cadena: 25 int l = pirateMessage.length(); The replace Method El método replace de la clase String retorna un string, reemplazando los caracteres o strings en relación a una referencia de un objeto String. CharSequence puede ser un String, StringBuffer o StringBuilder. Existen 2 declaraciones probables para replace: public String replace(char oldChar, char newChar){ public String replace(CharSequence target, charSequence replacement){ Ejemplos //Retorna la cadena sustituyendo las 'B' por 'J' String s1 = pirateMessage.replace('B','J'); //Retorna la cadena sustituyendo los lugares blancos por 'X' String s2 = pirateMessage.replace(' ','X'); //Retorna la cadena sustituyendo 2Chest" por "Coins" String s3 = pirateMessage.replace("Chest", "Coins"); The startsWith Method El método startsWith de la clase String retorna un valor booleano con el fruto del test al verificar si la cadena empieza con los parámetros pasados Hay 2 declaraciones posibles: public boolean startsWith(String prefix, int toffset){ public boolean startsWith(String prefix){ Ejemlos //Retorna true ya que la cadena inicia con los parámetros boolean b1 = treasureMessage.startsWith(" Buried Treasure"); //Retorna false ya que la cadena no inicia con los parámetros dados a dividir de la posición 8 boolean b2 = treasureMessage.startsWith("Treasure",8); The endsWith Method El método endsWith de la clase String retorna un valor booleano representando el fruto del test de la comprobación de qe la cadena finaliza con los parámetros pasados. Hay una declaración posible: public boolean endsWith (String suffix){ Ejemplos: //Retorna true ya que el string finaliza con la dada en el parámetro boolean b1 = pirateMessage.endsWith("Treasure Chest! "); //Retorna false ya que la cadena no finaliza con la dada en el parámetro boolean b2 = pirateMessage.endsWith("Treasure Chest "); The substring Method El método substring de la calse String retorna la cadena resultante de la substracción de otra cadena. Hay 2 declaraciones posibles: public String substring (int beginIndex){ public String substring (int beginIndex, int endIndex){ Ejemplos: //Retorna el string desde la posición 9 String s1 = pirateMessage.substring(9); //Retorna el string desde la posición 9 hasta la 10 String s2 = pirateMessage.substring(9,10); //Produce yerro en tiempo de ejecución String s3 = pirateMessage.substring(9,-8); The trim Method El método trim de la clase String elimina los lugares blancos que peudan existir al comienzo de la cadena y al final. Hay 1 declaración posible: public String trim(){ Ejemplo: String s=pirateMessage.trim(); Y hasta aquí el Capitulo III, un capítulo largo pero sin duda significativo en vuestro aprendizaje pues son cosas que se usan continuamente en la programación, tanto los múltiples operadores que hemos dado como estos últimos métodos de la clase String. Como siempre digo, cualquier aportación o corrección es bienvenida. Saludos!!!