1. Estructura de la Stringclase

Hoy hablaremos de la Stringclase. Después de ints, la clase String es la clase más popular en Java. Se usa absolutamente en todas partes. Tiene un montón de métodos útiles que es mejor que conozcas.

La Stringclase es la única clase además de los tipos primitivos cuyos literales se pueden usar en una switchdeclaración; el compilador maneja la adición de cadenas y los objetos String de una manera especial; Stringlos objetos se almacenan en la memoria de una manera especial. Básicamente, la Stringclase es una clase muy especial.

Además, la Stringclase tiene un montón de clases auxiliares cuyo propósito es simplificar aún más el trabajo con cadenas en Java. Cuando aprendas todo esto, muchas cosas te resultarán mucho más fáciles de hacer. Bueno, comenzaremos desde el núcleo mismo de este ecosistema: la organización de la Stringclase.

Matriz de caracteres

La estructura de la Stringclase es en realidad muy simple: dentro de ella hay una matriz de caracteres (char array) que almacena todos los caracteres de la cadena. Por ejemplo, así es como se almacena la palabra 'Hola':

Estructura de la clase String
¡Importante!

En realidad, esto no es del todo exacto. Debido a que la Stringclase es muy importante, utiliza muchas optimizaciones y los datos no se almacenan internamente como una matriz de caracteres, sino simplemente como una matriz de bytes.


2. Métodos de la Stringclase

La Stringclase tiene muchos métodos: ¡solo tiene 18 constructores! Así que a continuación solo mencionamos los más básicos de ellos:

Métodos Descripción
int length()
Devuelve el número de caracteres de la cadena.
boolean isEmpty()
Comprueba si la cadena es una cadena vacía
boolean isBlank()
Comprueba que la cadena contiene solo caracteres de espacio en blanco: espacio, tabulador, nueva línea, etc.
char charAt(int index)
Devuelve el carácter en la posición de índice en la cadena.
char[] toCharArray()
Devuelve una matriz de los caracteres (una copia) que componen la cadena
byte[] getBytes()
Convierte una cadena en un conjunto de bytes y devuelve la matriz de bytes.
String[] split(String regex)
Divide una cadena en varias subcadenas.
String join(CharSequence delimiter, elements)
Une varias subcadenas juntas
String intern()
Pone una cadena en el string pool.

Puede obtener más información sobre los constructores en el artículo Java Constructors .

Escribamos un programa que convierta una ruta de archivo del estilo Unix al estilo Windows. Unix usa el /carácter para separar carpetas, mientras que Windows usa el \carácter.

Solución 1: usar una matriz de caracteres

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

char[] chars = path.toCharArray();
for (int i = 0; i < chars.length; i++)
   if (chars[i] == '/')
      chars[i] = '\\';

String result = new String(chars);
System.out.println(result);
Cree un objeto Scanner.
Lea una línea desde la consola.

Convierta una cadena en una matriz de caracteres.
Repita los caracteres.
Si el carácter es /,
reemplácelo con \. No te olvides de escapar.

Cree una nueva cadena basada en la matriz de caracteres.
Muestre la cadena.

Solución 2: — usando los métodos split()yjoin()

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

String[] array = path.split("/");


String result = String.join("\\", array);


System.out.println(result);
Cree un objeto Scanner.
Lea una línea desde la consola.

Convierta una cadena en una matriz de cadenas . El /carácter se usa como separador (las dos barras adicionales son el resultado del doble escape).
Concatene todas las cadenas en la matriz de cadenas . El \se usa como separador (lo vemos escapado).

Muestre la cadena.

Solución 3: — usando el replace(char oldChar, char newChar)método

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

String result = path.replace('/', '\\');

System.out.println(result);
Cree un objeto Scanner.
Lea una línea desde la consola.

Simplemente reemplace un carácter por otro
(el segundo tiene escape).
Muestre la cadena.