2. Uso de cadenas en Java
Java posee gran capacidad para el manejo de cadenas dentro de sus clases String y
StringBuffer. Un objeto String representa una cadena alfanumérica de un valor
constante que no puede ser cambiada después de haber sido creada. Un objeto
StringBuffer representa una cadena cuyo tamaño puede variar.
La clase StringBuffer dispone de muchos métodos para modificar el contenido de
los objetos StringBuffer. Si el contenido de una cadena va a ser modificado en un
programa, habrá que sacrificar el uso de objetos String en beneficio de
StringBuffer, que aunque consumen más recursos del sistema, permiten ese tipo de
manipulaciones.
3. Constructores StringBuffer
StringBuffer()
-Crea un StringBuffer vacio y una capacidad inicial de 16 caracteres
StringBuffer sb= new StringBuffer();
StringBuffer(int capacity)
-Construye un StringBuffer vacio y una capacidad inicial especificada
StringBuffer(String str)
-Construye un StringBuffer y le asigna el contenido del String str
String str= “ejemplo”;
StringBuffer sb= new StringBuffer(str);
4. Métodos de la clase StringBuffer
La clase StringBuffer se utiliza prácticamente siempre que se desee
modificar una cadena de caracteres. Completa los métodos de la clase
String ya que éstos realizan sólo operaciones sobre el texto que no
conllevan un aumento o disminución del número de letras del String.
Recuérdese que hay muchos métodos cuyos argumentos deben ser
objetos String. que antes de pasar esos argumentos habrá que realizar
la conversión correspondiente.
5. Length() Devuelve el numero de caracteres en la
cadena.
Capacity() Devuelve el espacio libre del
StringBuffer
CharAt(int) Devuelve el carácter en la posición
especifica
getChars(int,int,char[],int) copia los caracteres indicados en la
posición indicada de un array de
caracteres
Insert() inserta un string o un valor
(int,float,doublé,…) en la posición
especificada de un StringBuffer
reverse() Cambia el orden de los caracteres
setCharAt(int,char) Cambia el carácter en la posición
indicada
setLength(int) Cambia el tamaño del StringBuffer
6. toString() Convierte en objeto de tipo String
Delete(int start,int end) Remueve los caracteres del
StringBuffer ,según los intervalos de
posición dado , comienza en start y
termina en end-1
si se ingresa mismo valor en start y
end ningún cambio será efectuado
Append(x) Añade X al final de la cadena. X
puede ser de cualquier tipo
Metodos de la clase String, StringBuffer, StringBuilder
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html
7. EJEMPLO
class CadAppend {
public static void main( String args[] ) {
StringBuffer str = new StringBuffer( "Hola" );
str.append( " Mundo" );
System.out.println( str );
}
}
8. Ejemplo
Import java.lang.StringBuffer.*;
public class Stringbuff {
public static void main(String[] args) {
String s = "1234567890";
s = separarMiles(s);
System.out.println(s);
}
public static String separarMiles(String s){
//creamos un StringBuffer a partir del String s
StringBuffer aux = new StringBuffer(s);
//le damos la vuelta
aux.reverse();
//variable que indica donde insertar el siguiente punto
int posicion = 3;
//mientras no lleguemos al final del número
while(posicion <aux.length()){
//insertamos un punto en la posición
aux.insert(posicion,'.');
//siguiente posición donde insertar
posicion+=4;
}
//le damos de nuevo la vuelta
aux.reverse();
//el StringBuffer se pasa a String y se devuelve
return aux.toString();
}
}
9. Diferencias entre clases de cadena en Java
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.
10. Conclusión
En la amplia mayoría de los casos es recomendable utilizar la clase StringBuilder para
concatenar cadenas de caracteres. La clase StringBuilder tiene el mismo API que
StringBuffer, por lo que reemplazar código que usa StringBuffer es relativamente sencillo.
La única salvedad sería si la concatenación ocurre en un entorno multihilos, donde diferentes
hilos van modificando la misma concatenación. De todas formas, en la mayoría de los casos
la concatenación ocurre en variables locales dentro de métodos, por lo que el uso de
StringBuilder sigue siendo la opción recomendada.