1. Comparación de cadenas

Una de las operaciones más comunes con cadenas es la comparación. La clase String tiene más de diez métodos diferentes que se utilizan para comparar una cadena con otra cadena. A continuación vamos a echar un vistazo a siete de los principales.

Métodos Descripción
boolean equals(String str)
Las cadenas se consideran iguales si todos sus caracteres coinciden.
boolean equalsIgnoreCase(String str)
Compara cadenas, ignorando el caso de las letras (ignora si son mayúsculas o minúsculas)
int compareTo(String str)
Compara cadenas lexicográficamente. Devuelve 0 si las cadenas son iguales. El valor devuelto es menor que cero si la cadena actual es menor que el parámetro de cadena. El valor devuelto es mayor que si la cadena actual es mayor que el parámetro de cadena.
int compareToIgnoreCase(String str)
Compara cadenas lexicográficamente mientras ignora mayúsculas y minúsculas. Devuelve 0 si las cadenas son iguales. El valor de retorno es negativo si la cadena actual es menor que el parámetro de cadena. El valor devuelto es mayor que si la cadena actual es mayor que el parámetro de cadena.
boolean regionMatches(int toffset, String str, int offset, int len)
Compara partes de cadenas
boolean startsWith(String prefix)
Comprueba si la cadena actual comienza con la cadenaprefix
boolean endsWith(String suffix)
Comprueba si la cadena actual termina con la cadenasuffix

Supongamos que desea escribir un programa que le pida al usuario una ruta a un archivo y luego verifique el tipo de archivo según su extensión. El código de dicho programa podría verse así:

Código notas
Scanner console = new Scanner(System.in);
String path = console.nextLine();

if (path.endsWith(".jpg") || path.endsWith(".jpeg"))
{
   System.out.println("This is a jpeg!");
}
else if (path.endsWith(".htm") || path.endsWith(".html"))
{
   System.out.println("This is an HTML page");
}
else if (path.endsWith(".doc") || path.endsWith(".docx"))
{
   System.out.println("This is a Word document");
}
else
{
   System.out.println("Unknown format");
}
Crear un Scannerobjeto
Leer una línea desde la consola

Verificar si la cadena pathtermina con la cadena dada


2. Búsqueda de subcadenas

Después de comparar cadenas, la segunda operación más popular es encontrar una cadena dentro de otra. La clase String también tiene algunos métodos para esto:

Métodos Descripción
int indexOf(String str)
Busca la cadena stren la cadena actual. Devuelve el índice del primer carácter de la primera aparición.
int indexOf(String str, int index)
Busca la cadena stren la cadena actual, omitiendo los primeros indexcaracteres. Devuelve el índice de la ocurrencia.
int lastIndexOf(String str)
Busca la cadena stren la cadena actual, comenzando desde el final. Devuelve el índice de la primera aparición.
int lastIndexOf(String str, int index)
Busca la cadena stren la cadena actual desde el final, omitiendo los primeros indexcaracteres.
boolean matches(String regex)
Comprueba si la cadena actual coincide con un patrón especificado por una expresión regular.

Los métodos indexOf(String)y indexOf(String, index)a menudo se usan en combinación. El primer método le permite encontrar la primera aparición de la subcadena pasada en la cadena actual. Y el segundo método le permite encontrar las ocurrencias segunda, tercera, etc. omitiendo los primeros caracteres de índice.

Supongamos que tenemos una URL como " https://domain.com/about/reviews ", y queremos reemplazar el nombre de dominio con " codegym.cc ". Las direcciones URL pueden tener todo tipo de nombres de dominio diferentes, pero sabemos lo siguiente:

  • El nombre de dominio está precedido por dos barras diagonales: " //"
  • El nombre de dominio va seguido de una sola barra inclinada: " /"

Así es como se vería el código para dicho programa:

Código notas
Scanner console = new Scanner(System.in);
String path = console.nextLine();

int index = path.indexOf("//");
int index2 = path.indexOf("/", index + 2);

String first = path.substring(0, index + 2);
String last = path.substring(index2);

String result = first + "codegym.cc" + last;
System.out.println(result);
Crear un objeto Scanner
Leer una línea de la consola

Obtener el índice de la primera aparición de la cadena " //"
Obtenemos el índice de la primera aparición de la cadena /, pero sólo buscamos una aparición de los caracteres //.
Obtenemos la cadena desde el principio hasta el final de los caracteres. //
Obtenemos la cadena /desde el final.

Concatenamos las cadenas y el nuevo dominio.

Los métodos lastIndexOf(String)y lastIndexOf(String, index)funcionan de la misma manera, solo que la búsqueda se realiza desde el final de la cadena hasta el principio.



3. Crear subcadenas

Además de comparar cadenas y encontrar subcadenas, existe otra acción muy popular: obtener una subcadena de una cadena. Da la casualidad de que el ejemplo anterior le mostró una substring()llamada de método que devolvió parte de una cadena.

Aquí hay una lista de 8 métodos que devuelven subcadenas de la cadena actual:

Métodos Descripción
String substring(int beginIndex, int endIndex)
Devuelve la subcadena especificada por el rango de índice beginIndex..endIndex.
String repeat(int count)
Repite la cadena actual n veces
String replace(char oldChar, char newChar)
Devuelve una nueva cadena: reemplaza el carácter oldCharcon el carácternewChar
String replaceFirst(String regex, String replacement)
Reemplaza la primera subcadena, especificada por una expresión regular, en la cadena actual.
String replaceAll(String regex, String replacement)
Reemplaza todas las subcadenas en la cadena actual que coincidan con la expresión regular.
String toLowerCase()
Convierte la cadena a minúsculas
String toUpperCase()
Convierte la cadena a mayúsculas
String trim()
Elimina todos los espacios al principio y al final de una cadena

Aquí hay un resumen de los métodos disponibles:

substring(int beginIndex, int endIndex)método

El substringmétodo devuelve una nueva cadena que consta de caracteres en la cadena actual, comenzando en el carácter con índice beginIndexy terminando en endIndex. Como ocurre con todos los intervalos en Java, el carácter con índice endIndexno se incluye en el intervalo. Ejemplos:

Código Resultado
"Hellos".substring(0, 3);
"Hel"
"Hellos".substring(1, 4);
"ell"
"Hellos".substring(1, 6);
"ellos"
"Hellos".substring(1);
"ellos"

Si endIndexno se especifica el parámetro (lo que es posible), la subcadena se toma desde el carácter en beginIndex hasta el final de la cadena.

repeat(int n)método

El método de repetición simplemente repite los ntiempos de la cadena actual. Ejemplo:

Código Resultado
"Hello".repeat(3);
"HelloHelloHello"
"Hello".repeat(2);
"HelloHello"
"Hello".repeat(1);
"Hello"
"Hello".repeat(0);
""

replace(char oldChar, char newChar)método

El replace()método devuelve una nueva cadena en la que todos los caracteres oldCharse reemplazan con el carácter newChar. Esto no cambia la longitud de la cadena. Ejemplo:

Código Resultado
"Programming".replace('Z', 'z');
"Programming"
"Programming".replace('g', 'd');
"Prodrammind"
"Programming".replace('a', 'e');
"Progremming"
"Programming".replace('m', 'w');
"Prograwwing"

replaceFirst()y replaceAll()metodos

El replaceAll()método reemplaza todas las apariciones de una subcadena con otra. El replaceFirst()método reemplaza la primera aparición de la subcadena pasada con la subcadena especificada. La cadena que se va a reemplazar se especifica mediante una expresión regular. Profundizaremos en las expresiones regulares en la búsqueda Java Multithreading .

Ejemplos:

Código Resultado
"Good news everyone!".replaceAll("e.", "EX");
"Good nEXs EXEXyonEX"
"Good news everyone!".replaceAll("o.", "-o-");
"G-o-d news every-o-e!"
"Good news everyone!".replaceFirst("e.", "EX");
"Good nEXs everyone!"
"Good news everyone!".replaceFirst("o.", "-o-");
"G-o-d news everyone!"

toLowerCase() and toUpperCase()métodos

Llegamos a conocer estos métodos cuando aprendimos por primera vez a llamar a los métodos de la Stringclase.

trim()método

El trim()método elimina los espacios iniciales y finales de una cadena. No toca los espacios que están dentro de una cadena (es decir, ni al principio ni al final). Ejemplos:

Código Resultado
"     ".trim();
""
"Hello".trim();
"Hello"
" Hello\n how are you?\n   ".trim();
"Hello\n how are you?\n"
"  Password\n   \n ".trim();
"Password\n   \n"