UNIDAD 8: TIPOS ENUMERADOS. ArrayList. LinkedList.
Java StringBuilder - StringBuffer
La clase String es una clase no modificable. Esto quiere decir que cuando se
modifica un String se crea un nuevo objeto String modificado a partir del
original y el recolector de basura es el encargado de eliminar de la memoria
el String original.
Java proporciona la clase StringBuffer y a partir de Java 5 la clase
StringBuilder para trabajar con cadenas de caracteres sobre las que vamos
a realizar modificaciones frecuentes de su contenido.
La diferencia entre StringBuffer y StringBuilder es que los métodos de
StringBuffer están sincronizados y los de StringBuilder no lo están. Por este
motivo StringBuilder ofrece mejor rendimiento que StringBuffer y la
utilizaremos cuando la aplicación tenga un solo hilo de ejecución.
En general decidiremos cuando usar String, StringBuilder o StringBuffer
según lo siguiente:
- Usaremos String si la cadena de caracteres no va a cambiar.
- Usaremos StringBuilder si la cadena de caracteres puede cambiar y
solamente tenemos un hilo de ejecución.
- Usaremos StringBuffer si la cadena de caracteres puede cambiar y
tenemos varios hilos de ejecución.
En esta entrada utilizaremos StringBuilder teniendo en cuenta que todo lo
que se explica aquí es aplicable a StringBuffer.
Constructores de la Clase StringBuilder
Un objeto de tipo StringBuilder gestiona automáticamente su capacidad
– Se crea con una capacidad inicial.
– La capacidad se incrementa cuando es necesario.
La clase StringBuilder proporcionan varios constructores, algunos de ellos
son:
CONSTRUCTOR DESCRIPCIÓN
Crea un StringBuilder vacío.
StringBuilder ()
StringBuilder sb = new StringBuilder ();
Crea un StringBuilder vacío con capacidad para
StringBuilder(int n)
n caracteres.
6
UNIDAD 8: TIPOS ENUMERADOS. ArrayList. LinkedList.
Crea un StringBuilder y le asigna el contenido
del String s.
StringBuilder(String s);
String s = "ejemplo";
StringBuilder sb = new StringBuilder (s);
Métodos de la Clase StringBuilder
La clase StringBuilder proporcionan métodos para acceder y modificar la cadena de
caracteres. Algunos de ellos son:
MÉTODO DESCRIPCIÓN
length() Devuelve la longitud de la cadena
Añade X al final de la cadena. X puede ser de
append(X);
cualquier tipo
Inserta X en la posición indicada. X puede ser de
insert(posicion, X)
cualquier tipo.
Cambia el carácter que se encuentra en la posición
setCharAt(posicion, c)
indicada, por el carácter c.
Devuelve el carácter que se encuentra en la posición
charAt(posicion)
indicada.
Devuelve la posición de la primera aparición de
indexOf(‘caracter’)
carácter
Devuelve la posición de la última aparición de
lastIndexOf(‘caracter’)
carácter
Devuelve la subcadena (String) comprendida entre
substring(n1,n2) las posiciones n1 y n2 ambas incluidas. Si no se
especifica n2, devuelve desde n1 hasta el final.
Elimina los caracteres desde la posición inicio hasta
delete(inicio, fin)
fin.
reverse() Invierte el contenido de la cadena
toString() Devuelve el String equivalente.
Los puedes consultar todos en la API de Java:
[Link]
[Link]
7
UNIDAD 8: TIPOS ENUMERADOS. ArrayList. LinkedList.
Ejemplo de uso de la clase StringBuilder:
Vamos a escribir un método separarMiles que reciba un String que
representa un número entero y devuelva un String con el mismo número al
que se le añadirán los puntos separadores de millares.
Por ejemplo, si el método recibe el String "12345678" debe devolver el
String "12.345.678"
Este problema lo podemos resolver de varias formas. En este caso la idea
es darle la vuelta al número e insertar el primer punto en la cuarta posición
del String, el siguiente punto 4 posiciones más adelante el siguiente otras 4
posiciones más adelante .... hasta llegar al final del número. De esta forma
obtendremos grupos de 3 cifras separados por punto.
Finalmente le volvemos a dar la vuelta y ya lo tendremos.
Por ejemplo si el String es:
"12345678"
Primero le damos la vuelta:
"87654321"
Ahora tenemos que insertar un punto donde está el 5. Nos queda:
"876.54321"
Insertamos otro punto cuatro posiciones más adelante, donde está el 2:
"876.543.21"
Ahora intentaríamos insertar otro punto cuatro posiciones más adelante
pero como llegamos al final el proceso termina.
Si le damos la vuelta obtendremos el resultado:
"12.345.678"
/*
* Ejemplo de uso de StringBuilder
* Separador de millares
*/
package string8;
public class String8 {
8
UNIDAD 8: TIPOS ENUMERADOS. ArrayList. LinkedList.
public static void main(String[] args) {
String s = "1234567890";
s = separarMiles(s);
[Link](s);
public static String separarMiles(String s){
//creamos un StringBuilder a partir del String s
StringBuilder aux = new StringBuilder(s);
//le damos la vuelta
[Link]();
//variable que indica donde insertar el siguiente punto
int posicion = 3;
//mientras no lleguemos al final del número
while(posicion < [Link]()){
//insertamos un punto en la posición
[Link](posicion,'.');
//siguiente posición donde insertar
posicion+=4;
//le damos de nuevo la vuelta
[Link]();
//el StringBuilder se pasa a String y se devuelve
return [Link]();