Fragmento de una conferencia con un mentor como parte del curso de Codegym University. Inscríbete al curso completo.
"¡Hola, amigo! Hoy analizaremos algunos escenarios más comunes relacionados con el trabajo con cadenas. Por ejemplo, ¿sabe cómo dividir una cadena en varias partes?"
"No te lo voy a decir de inmediato, Ellie. Pero me lo vas a decir a mí, ¿verdad?"
split()
método
"Hay varias formas de hacer esto. La primera forma de dividir una cadena en varias partes es usar el split()
método. Una expresión regular que define una cadena delimitadora especial debe pasarse como parámetro. Aprenderá en qué consiste una expresión regular la búsqueda de colecciones de Java .
Ejemplo:
Código | Resultado |
---|---|
|
El resultado será una matriz de tres cadenas:
|
Simple, pero a veces este enfoque es excesivo. Si hay muchos delimitadores (por ejemplo, espacios, caracteres de nueva línea, tabulaciones, puntos), entonces debe construir una expresión regular bastante compleja".
"Bueno, seguro. Y si es difícil de leer, entonces es difícil hacer cambios.
StringTokenizer
clase
Fragmento de una conferencia con un mentor como parte del curso de Codegym University. Inscríbete al curso completo.
"Java tiene una clase especial cuyo trabajo completo es dividir una cadena en subcadenas.
"Esta clase no usa expresiones regulares: en su lugar, simplemente pasa una cadena que consta de delimitadores. La ventaja de este enfoque es que no divide la cadena completa en partes de una sola vez, sino que se mueve de principio a fin una paso a la vez.
La clase tiene un constructor y dos métodos. Pasamos al constructor una cadena que dividimos en partes y una cadena compuesta por un conjunto de caracteres delimitadores.
Métodos | Descripción |
---|---|
|
Devuelve la siguiente subcadena |
|
Comprueba si hay más subcadenas. |
"Esta clase de alguna manera me recuerda a la clase Scanner, que también tiene nextLine()
métodos hashNextLine()
.
"Esa es una buena observación que has hecho. Puedes crear un StringTokenizer
objeto con este comando:
StringTokenizer name = new StringTokenizer(string, delimiters);
Donde cadena es la cadena a dividir en partes. Y delimitadores es una cadena, y cada carácter que contiene se trata como un delimitador. Ejemplo:
Código | Salida de consola |
---|---|
|
|
"Tenga en cuenta que cada carácter de la cadena que se pasa en la segunda cadena al StringTokenizer
constructor se considera un separador.
String.format()
método y StringFormatter
clase
"Otro método interesante de la clase String es format()
.
"Digamos que tiene varias variables almacenando datos. ¿Cómo las muestra en la pantalla en una línea? Por ejemplo, tenemos algunos datos (columna izquierda) y el resultado deseado (columna derecha):
Código | Salida de consola |
---|---|
|
|
El código para dicho programa se verá así:
Código de programa |
---|
|
"Estarás de acuerdo conmigo en que el código no es muy legible. Y si los nombres de las variables fueran más largos, el código se volvería aún más difícil:
Código de programa |
---|
|
"¡Sí, es una lectura difícil!"
"No te preocupes. Esta es una situación común en los programas del mundo real, así que quiero contarte una forma de escribir este código de manera más simple y concisa.
String.format
"La String
clase tiene un método estático format()
: te permite especificar un patrón para ensamblar una cadena con datos. La apariencia general del comando es la siguiente:
String name = String.format(pattern, parameters);
Ejemplo:
Código | Resultado |
---|---|
|
|
|
|
|
|
"El format()
primer parámetro del método es una cadena de formato que contiene todo el texto deseado junto con caracteres especiales llamados especificadores de formato (como %d
y %s
) en los lugares donde necesita insertar datos.
"El format()
método reemplaza estos especificadores %s
de %d
formato con los parámetros que siguen a la cadena de formato en la lista de parámetros. Si queremos insertar una cadena, escribimos . %s
Si queremos insertar un número, entonces el especificador de formato es %d
. Ejemplo:
Código | Resultado |
---|---|
|
s es igual a"a=1, b=4, c=3" |
"Aquí hay una breve lista de especificadores de formato que se pueden usar dentro de la cadena de formato:
especificador | Significado |
---|---|
|
String |
|
entero: byte , short , int ,long |
|
número real: float ,double |
|
boolean |
|
char |
|
Date |
|
% personaje |
"Estos especificadores indican el tipo de datos, pero también hay especificadores que indican el orden de los datos. Para obtener un argumento por su número (la numeración comienza desde uno), debe escribir " % 1$ d " en lugar de " %d ". Ejemplo:
Código | Resultado |
---|---|
|
s es igual a"a=13, b=12, c=11" |
%3$d
obtendrá el tercer argumento, %2$d
obtendrá el segundo argumento y %d
obtendrá el primer argumento. Los especificadores de formato %s
y %d
se refieren a argumentos independientemente de los especificadores como %3$d
o%2$s
Grupo de cuerdas
"Cada cadena especificada en el código como un literal de cadena se almacena en un área de memoria llamada StringPool
mientras se ejecuta el programa. StringPool
Es una matriz especial para almacenar cadenas. Su propósito es optimizar el almacenamiento de cadenas:
"Primero, las cadenas especificadas en el código deben almacenarse en algún lugar, ¿verdad? El código consta de comandos, pero los datos (especialmente, las cadenas grandes) deben almacenarse en la memoria por separado del código. Solo las referencias a los objetos de cadena aparecen en el código.
"Segundo, todos los literales de cadena idénticos deben almacenarse en la memoria solo una vez. Y así es como funciona. Cuando la máquina Java carga el código de su clase, todos los literales de cadena se agregan al si aún no están allí. Si StringPool
están ya está allí, entonces simplemente usamos una referencia de cadena del archivo StringPool
.
En consecuencia, si asigna el mismo literal a varias variables de cadena en su código, estas variables contendrán la misma referencia. Se agregará un literal a la StringPool
única vez. En todos los demás casos, el código obtendrá una referencia a la cadena ya cargada en el archivo StringPool
.
Así es más o menos cómo funciona:
Código | Trabajando con StringPoll |
---|---|
|
|
"Es por eso que las variables a
y b
almacenarán las mismas referencias".
"Espero haberlo entendido todo correctamente.
intern()
método.
"Y la mejor parte es que puede agregar mediante programación cualquier cadena al StringPool
. Para hacer esto, solo necesita llamar al método String
de la variable .intern()
"El intern()
método agregará la cadena a StringPool
si aún no está allí, y devolverá una referencia a la cadena en el StringPool
.
"¿Y qué sucederá si se agregan dos cadenas idénticas usando StringPool
el intern()
método?"
"El método devolverá las mismas referencias. Esto se puede usar para comparar cadenas por referencia. Ejemplo:
Código | Nota |
---|---|
|
|
|
|
Es poco probable que utilice este método con frecuencia. Dicho esto, a la gente le gusta preguntar al respecto en las entrevistas de trabajo.
"Entonces, es mejor saberlo que no saberlo. ¡Gracias, Ellie!"
GO TO FULL VERSION