"¡Saludos, Amigo!"
"¡Hola, Rishi!"
"Ahora sabes lo suficiente sobre cadenas para aprender algo interesante. Más específicamente, una nueva clase similar, pero no exactamente igual, a la clase String".
"Suena intrigante, aunque no me queda del todo claro cómo las cadenas ordinarias se quedan cortas y por qué se necesitan otras clases similares a cadenas".
"Comencemos con el hecho de que las cadenas son objetos inmutables en Java".
"¿Cómo es eso? Lo olvidé... O nunca supe, para empezar..."
"Déjame recordarte que los objetos inmutables son aquellos cuyos estados no se pueden cambiar después de su creación".
"Ahhh... ¿Por qué las cadenas son inmutables en Java?"
"Esto se hizo para optimizar la clase String y permitir que se use en todas partes. Por ejemplo, solo se recomiendan tipos inmutables para usar como claves en la colección HashMap .
"Sin embargo, a menudo surgen situaciones en las que a los programadores les resulta más conveniente que la clase String sea mutable. Quieren una clase que no cree una nueva subcadena cada vez que se llama a uno de sus métodos".
"¿Pero para qué sirve?"
"Bueno, supongamos que tenemos una cadena muy grande y necesitamos agregarle algo al final con frecuencia. En este caso, incluso una colección de caracteres ( ) ArrayList<Character>
puede ser más eficiente que recrear y concatenar objetos String constantemente".
"¿Y es por eso que necesitamos cadenas que no sean exactamente de la clase String?"
"Exactamente. El lenguaje Java ha agregado un tipo similar a una cadena que se puede cambiar. Se llama StringBuilder
".
Creando un objeto
"Para crear un StringBuilder
objeto basado en una cadena existente, debe ejecutar una declaración como:
StringBuilder name = new StringBuilder(string);
"Para crear una cadena mutable vacía, debe usar una declaración como esta:
StringBuilder name = new StringBuilder();
Lista de métodos
"La StringBuilder
clase tiene dos docenas de métodos útiles. Estos son los más importantes:
Método | Descripción |
---|---|
|
Convierte el objeto pasado en una cadena y lo agrega a la cadena actual |
|
Convierte el objeto pasado en una cadena y lo inserta en el medio de la cadena actual |
|
Reemplaza la parte de la cadena especificada por el intervalo de inicio... fin con la cadena pasada |
|
Elimina el carácter con el índice especificado de la cadena |
|
Elimina caracteres dentro del intervalo especificado de la cadena |
|
Busca una subcadena en la cadena actual |
|
Busca una subcadena en la cadena actual, comenzando desde el final |
|
Devuelve el carácter de la cadena en el índice pasado |
|
Devuelve la subcadena definida por el intervalo especificado |
|
Invierte la cadena actual. |
|
Cambia el carácter en el índice especificado al carácter pasado |
|
Devuelve la longitud de la cadena en caracteres |
"Y ahora les describiré brevemente cada uno de estos métodos.
Agregar a una cadena
"Para agregar algo a una cadena mutable ( StringBuilder
), use el append()
método. Ejemplo:
Código | Descripción |
---|---|
|
Hi |
Conversión a una cadena estándar
"Para convertir un StringBuilder
objeto en un objeto String, solo necesita llamar a su toString()
método. Ejemplo
Código | Producción |
---|---|
|
Hi123 |
¿Cómo elimino un personaje?
"Para eliminar un carácter en una cadena mutable, debe usar el deleteCharAt()
método. Ejemplo:
Código | Producción |
---|---|
|
Helo |
¿Cómo reemplazo parte de una cadena con otra cadena?
"Para esto existe el replace(int begin, int end, String str)
método. Ejemplo:
Código | Producción |
---|---|
|
MeHello!w |
"Suena conveniente. Gracias, Rishi".
"Ni lo menciones. ¿Qué te parece esto? ¿Puedes voltear una cuerda hacia atrás? ¿Cómo lo harías?"
"Bueno... Yo crearía un StringBuilder
, le pondría una cadena... Luego crearía una nueva cadena, y en un bucle desde el último carácter hasta el primero... O tal vez un cambio bit a bit...
"No está mal. Pero podría ser más rápido. Hay un método especial para hacerlo. reverse();
Ejemplo:
Código | Producción |
---|---|
|
olleH |
"Además de la StringBuilder
clase, Java tiene otra clase similar a una cadena llamada StringBuffer
. Es un análogo de la StringBuilder
clase, pero sus métodos están marcados con el synchronized
modificador".
"¿Qué significa eso?"
"Significa que StringBuffer
se puede acceder al objeto simultáneamente desde múltiples hilos".
"Todavía no estoy muy familiarizado con los subprocesos. Pero 'se puede acceder desde múltiples subprocesos' es claramente mejor que 'no se puede acceder desde múltiples subprocesos'... ¿Por qué no usarlo siempre entonces? StringBuffer
"
"Porque es mucho más lento que StringBuilder
. Es posible que necesite una clase de este tipo cuando comience a explorar activamente los subprocesos múltiples en la búsqueda de subprocesos múltiples de Java .
"Escribiré eso en mi memoria para no olvidar. Marcado 'para el futuro'.
GO TO FULL VERSION