Programando con los operadores de Java y Strings (Parte III)

Buenos dias, como os dije hoy pondría la Parte III, la cual trata principalmente sobre la clase String de Java, al igual que sus métodos mas importantes 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 objetivo principal de esta parte es desarrollar código que usen el operador de concatenación y los siguientes 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 parte discutiremos que es un String, como concatenar String separados y tambien detallaremos métodos. Una vez que veamos esta parte 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 nunca cambia. Por ejemplo, el siguiente 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 cambia 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 cambia el valor:

quote.replace("No Tales", "Tales");
System.out.println(quote);

//Para que el valor de quote cambiara, habría que hacerlo 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 construir 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 hacer con la clase String.

Podemos crear una cadena sin asignar un objeto String. Asegúrate siempre de asignarle un valor, o tendrás errores 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 diferentes enfoques para crear objetos de tipo String.

String quote2a=new String(); //quote2a es una variable de referencia
String quote2b=new String(""); //Equivalente a lo anterior

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 mientras 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 varias cadenas conjuntamente.

  • + String Concatenation Operator

El operador de concatenación en Java une 2 Strings de manera muy fácil. Por ejemplo, “doub” + “loon” es igual 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 hacer override al método toString para retornar la información que mejor represente el estado del objeto. El método toString hace un uso común 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:
Considerando que tenemos 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 siguientes 2 sentencias, los 2 enteros se han sumado entre ellos. A continuación, el operador de concatenación toma 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, coge la String title2 y la une con la representación de la cadena de floatShovels. El resultado es un String. Ahora este resultado 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 toma 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 gran 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.

String
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 espacios blancos al inicio y un espacio 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 espacio 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 espacio 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 partir de la posición 9
int i2 = pirateMessage.indexOf('u',9);
        
//Retorna el entero 13 como el lugar donde empieza el string dado
int i3 = pirateMessage.indexOf(&quot;sure&quot;);
        
//Retorna el entero .1 ya que no hay string Treasure a partir de la posición 10
int i4 = pirateMessage.indexOf(&quot;Treasure&quot;,10);
        
//Retorna el entero -1 ya que no hay caracter 'u' en la posición 100 o despues
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 longitud de la cadena en un objeto String:
Hay una declaración posible:

public int length(){}

Ejemplos:

//Retorna la longitud 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 posibles 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 espacios blancos por 'X'
String s2 = pirateMessage.replace(' ','X');
        
//Retorna la cadena sustituyendo 2Chest&quot; por &quot;Coins&quot;
String s3 = pirateMessage.replace(&quot;Chest&quot;, &quot;Coins&quot;);

The startsWith Method

El método startsWith de la clase String retorna un valor booleano con el resultado del test al comprobar 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 comienza con los parámetros
boolean b1 = treasureMessage.startsWith(&quot;  Buried Treasure&quot;);

//Retorna false ya que la cadena no comienza con los parámetros dados a partir de la posición 8
boolean b2 = treasureMessage.startsWith(&quot;Treasure&quot;,8);

The endsWith Method

El método endsWith de la clase String retorna un valor booleano representando el resultado del test de la comprobación de qe la cadena termina con los parámetros pasados.
Hay una declaración posible:

public boolean endsWith (String suffix){}

Ejemplos:

//Retorna true ya que el string termina con la dada en el parámetro
boolean b1 = pirateMessage.endsWith(&quot;Treasure Chest! &quot;);

//Retorna false ya que la cadena no termina con la dada en el parámetro
boolean b2 = pirateMessage.endsWith(&quot;Treasure Chest &quot;);

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 error en tiempo de ejecución
String s3 = pirateMessage.substring(9,-8);

The trim Method

El método trim de la clase String elimina los espacios blancos que peudan existir al principio 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 importante en nuestro 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!!!