Anexo Cheatsheet Strings en Java¶
Introducción¶
Desde el punto de vista de la programación diaria, uno de los tipos de datos más importantes de Java es String. String define y admite cadenas de caracteres. En algunos otros lenguajes de programación, una cadena o string es una matriz o array de caracteres. Este no es el caso con Java. En Java, los String son objetos.
En realidad, has estado usando la clase String desde el comienzo del curso, pero no lo sabías. Cuando crea un literal de cadena, en realidad está creando un objeto String. Por ejemplo, en la declaración:
1 | |
La clase String es bastante grande, y solo veremos una pequeña parte aquí.
Construyendo String¶
Puede construir un String igual que construye cualquier otro tipo de objeto: utilizando new y llamando al constructor String. Por ejemplo:
1 | |
Esto crea un objeto String llamado str que contiene la cadena de caracteres “Hola”. También puedes construir una String desde otro String. Por ejemplo:
1 2 | |
Después de que esta secuencia se ejecuta, str2 también contendrá la cadena de caracteres “Hola”. Otra forma fácil de crear una cadena se muestra aquí:
1 | |
En este caso, str se inicializa en la secuencia de caracteres “Estoy aprendiendo sobre String en JavadesdeCero.”. Una vez que haya creado un objeto String, puede usarlo en cualquier lugar que permita una cadena entrecomillada. Por ejemplo, puede usar un objeto String como argumento para println(), como se muestra en este ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
La salida del programa se muestra a continuación:
1 2 3 | |
Operando con Métodos de la clase String¶
La clase String contiene varios métodos que operan en cadenas. Aquí se detallan todos los métodos:
-
int length(): Devuelve la cantidad de caracteres del String.1"Javadesdecero.es".length(); // retorna 16 -
Char charAt(int i): Devuelve el carácter en el índice i.1System.out.println("Javadesdecero.es".charAt(3)); // retorna 'a' -
String substring(int i): Devuelve la subcadena del i-ésimo carácter de índice al final.1"Javadesdecero.es".substring(4); // retorna desdecero.es -
String substring(int i, int j): Devuelve la subcadena del índice i a j-1.1"Javadesdecero.es".substring(4,9); // retorna desde -
String concat(String str): Concatena la cadena especificada al final de esta cadena.1 2 3
String s1 = "Java"; String s2 = "desdeCero; String salida = s1.concat(s2); // retorna "JavadesdeCero" -
int indexOf(String s): Devuelve el índice dentro de la cadena de la primera aparición de la cadena especificada.1 2
String s = "Java desde Cero"; int salida = s.indexOf("Cero"); // retorna 11 -
int indexOf(String s, int i): Devuelve el índice dentro de la cadena de la primera aparición de la cadena especificada, comenzando en el índice especificado.1 2
String s = "Java desde Cero"; int salida = s.indexOf('a',2); //retorna 3 -
int lastIndexOf(int ch): Devuelve el índice dentro de la cadena de la última aparición de la cadena especificada.1 2
String s = "Java desde Cero"; int salida = s.lastIndexOf('a'); // retorna 3 -
boolean equals(Objeto otroObjeto): Compara este String con el objeto especificado.1 2
Boolean salida = "Java".equals("Java"); // retorna true Boolean salida = "Java".equals("java"); // retorna false -
boolean equalsIgnoreCase(String otroString): Compares string to another string, ignoring case considerations.1 2
Boolean salida= "Java".equalsIgnoreCase("Java"); // retorna true Boolean salida = "Java".equalsIgnoreCase("java"); // retorna true -
int compareTo(String otroString): Compara dos cadenas lexicográficamente.1 2 3 4 5 6 7
int salida = s1.compareTo(s2); // donde s1 y s2 son strings que se comparan /* Esto devuelve la diferencia s1-s2. Si: salida < 0 // s1 es menor que s2 salida = 0 // s1 y s2 son iguales salida > 0 // s1 es mayor que s2 */ -
int compareToIgnoreCase(String otroString): Compara dos cadenas lexicográficamente, ignorando las consideraciones case.1 2 3 4 5 6 7
int salida = s1.compareToIgnoreCase(s2); // donde s1 y s2 son strings que se comparan /* Esto devuelve la diferencia s1-s2. Si: salida < 0 // s1 es menor que s2 salida = 0 // s1 y s2 son iguales salida > 0 // s1 es mayor que s2 */Más información
En este caso, no considerará el case de una letra (ignorará si está en mayúscula o minúscula).
-
String toLowerCase(): Convierte todos los caracteres de String a minúsculas.1 2
String palabra1 = "HoLa"; String palabra2 = palabra1.toLowerCase(); // retorna "hola" -
String toUpperCase(): Convierte todos los caracteres de String a mayúsculas.1 2
String palabra1 = "HoLa"; String palabra2 = palabra1.toUpperCase(); // retorna "HOLA" -
String trim(): Devuelve la copia de la cadena, eliminando espacios en blanco en ambos extremos. No afecta los espacios en blanco en el medio.1 2
String palabra1 = " Java desde Cero "; String palabra2 = palabra1.trim(); // retorna "Java desde Cero" -
String replace(char oldChar, char newChar): Devuelve una nueva cadena al reemplazar todas las ocurrencias de oldChar con newChar.1 2
String palabra1 = "yavadesdecero"; String palabra2 = palabra1.replace('y' ,'j'); //retorna javadesdeceroMás información
palabra1 sigue siendo yavadesdecero y palabra2, javadesdecero
-
String replaceAll(String regex, String replacement): devuelve una cadena que reemplaza toda la secuencia de caracteres que coinciden con la expresión regularregexpor la cadena de reemplazoreplacement.1 2
String str = "Ejemplo con espacios en blanco y tabs"; String str2 = str.replaceAll("\\s", ""); //retorna EjemploconespaciosenblancoytabsMás información
Otras expresiones regulares (entre otras muchísimas):
\wCualquier cosa que sea un carácter de palabra\WCualquier cosa que no sea un carácter de palabra (incluida la puntuación, etc.)\sCualquier cosa que sea un carácter de espacio (incluido el espacio, los caracteres de tabulación, etc.)\SCualquier cosa que no sea un carácter de espacio (incluidas letras y números, así como puntuación, etc.)
Debe escapar de la barra invertida si desea que
\salcance el motor de expresiones regulares, lo que da como resultado\\s).Más información sobre expresiones regulares en java: https://www.vogella.com/tutorials/JavaRegularExpressions/article.html
Ejemplo de todos los métodos de String¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | |
Salida:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Arrays de String¶
Al igual que cualquier otro tipo de datos, los String se pueden ensamblar en arrays. Por ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Se muestra el resultado de este programa:
1 2 3 4 5 | |
Los String son inmutables¶
El contenido de un objeto String es inmutable. Es decir, una vez creada, la secuencia de caracteres que compone la cadena no se puede modificar. Esta restricción permite a Java implementar cadenas de manera más eficiente. Aunque esto probablemente suene como un serio inconveniente, no lo es.
Cuando necesite una cadena que sea una variación de una que ya existe, simplemente cree una nueva cadena que contenga los cambios deseados. Como los objetos String no utilizados se recolectan de forma automática, ni siquiera tiene que preocuparse por lo que sucede con las cadenas descartadas. Sin embargo, debe quedar claro que las variables de referencia de cadena pueden, por supuesto, cambiar el objeto al que hacen referencia. Es solo que el contenido de un objeto String específico no se puede cambiar después de haber sido creado.
Para comprender completamente por qué las cadenas inmutables no son un obstáculo, utilizaremos otro de los métodos de String: substring(). El método substring() devuelve una nueva cadena que contiene una parte especificada de la cadena invocadora. Como se fabrica un nuevo objeto String que contiene la subcadena, la cadena original no se altera y la regla de inmutabilidad permanece intacta. La forma de substring( ) que vamos a utilizar se muestra aquí:
1 | |
Aquí, beginIndex especifica el índice inicial, y endIndex especifica el punto de detención. Aquí hay un programa que demuestra el uso de substring( ) y el principio de cadenas inmutables:
1 2 3 4 5 6 7 8 9 10 11 12 | |
Salida:
1 2 | |
Como puede ver, la cadena original str no se modifica, y substr contiene la subcadena.
String en Argumentos de Línea de Comandos¶
Ahora que conoce la clase String, puede comprender el parámetro args en main() que ha estado en cada programa mostrado hasta ahora. Muchos programas aceptan lo que se llaman argumentos de línea de comandos. Un argumento de línea de comandos es la información que sigue directamente el nombre del programa en la línea de comando cuando se ejecuta.
Para acceder a los argumentos de la línea de comandos dentro de un programa Java es bastante fácil: se almacenan como cadenas en la matriz String pasada a main(). Por ejemplo, el siguiente programa muestra todos los argumentos de línea de comandos con los que se llama:
1 2 3 4 5 6 7 8 9 10 11 | |
Si DemoLC se ejecuta de esta manera,
1 | |
verá la siguiente salida:
1 2 3 4 5 | |
Observe que el primer argumento se almacena en el índice 0, el segundo argumento se almacena en el índice 1, y así sucesivamente.
Para tener una idea de la forma en que se pueden usar los argumentos de la línea de comandos, considere el siguiente programa. Se necesita un argumento de línea de comandos que especifique el nombre de una persona. Luego busca a través de una matriz bidimensional de cadenas para ese nombre. Si encuentra una coincidencia, muestra el número de teléfono de esa persona.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Aquí hay una muestra de ejecución:
1 2 | |
Concatenar cadenas en Java¶
Operador +¶
1 2 3 4 5 6 | |
salida:
1 2 3 | |
Método concat()¶
1 2 3 4 5 6 | |
salida:
1 2 3 | |
Método append de StringBuilder¶
1 2 | |
salida:
1 | |
¿Cuándo usar cada uno?¶
Si usas la concatenación de Strings en un bucle, por ejemplo algo similar a esto:
1 2 3 4 5 | |
Para el caso anterior, lo mejor seria utilitzar el método append de StringBuilder en lugar del operador + porque es mucho más rápido y consume menos memoria.
Versión con append:
1 2 3 4 5 | |
Si solo tienes una sentencia similar a esta:
1 | |
Entonces puedes usar el operador + sin problemas, porque el compilador usará StringBuilder automáticamente.