Bien, sabemos (o deberíamos saber) que un objeto de tipo String es inmutable, es decir, cuando lo creamos apunta a una sección de memoria, y cuando le concatenamos otra cadena, deja de apuntar a esa sección de memoria para apuntar a una nueva donde tendrá la nueva cadena, dejando la anterior para el "recolector de basura" (Garbage Collector).
Como veis, s apunta a "Hola", posteriormente le concatenamos la cadena "Mundo", con lo que s deja de apuntar a "Hola" y pasa a apuntar a "Hola Mundo". Es inmutable, se destruye el anterior y se crea uno nuevo, no puede cambiar.
Esto para la clase String, pero ahora tenemos 2 nuevas clases que si son mutables, pueden cambiar sin dejar de apuntar a la misma sección de memoria.
Como podéis observar, al concatenar el mismo tipo de texto, ya no deja de apuntar a su sección de memoria, si no que la amplía.
StringBuffer y StringBuilder son prácticamente iguales, la única diferencia es que StringBuffer es sincronizado y StringBuilder no, con lo cual a la hora de hacerlas funcionar, StringBuilder es más rápida al iterar, pero StringBuffer es más seguro.
Los constructores más utilizados por estas clases son:
- StringBuffer sb=new StringBuffer();
- StringBuffer sb=new StringBuffer(String cad);
- StringBuilder sbd=new StringBuilder();
- StringBuilder sbd=new StringBuilder(String cad);
Bueno, para los métodos voy a utilizar la clase StringBuffer, pero es igual para ambas:
- StringBuffer append(Strring cad): Método que concatena la cadena pasada por argumentos con la cadena de StringBuffer. IMPORTANTE: Este método esta sobrecargado, pudiendo pasar a cadena casi cualquier tipo de objeto(que pueda ser pasado a cadena), int, float, object, char....No los voy a poner, porque son muchos, y es todo lo mismo, podéis verlos aquí.
- sb.append("hola");
- int capacity(): Método que devuelve la capacidad actual.
- int n=sb.capacity();
- char charAt(int n): Método que devuelve el carácter de la posición ingresada por argumento. Recordamos que las cadenas comienzan a contar desde la posición 0.
- char c=sb.charAt(2) ;
- int codePointAt(int n): Método que devuelve el valor UNICODE del carácter situado en la posición pasada por argumentos.
- int n=sb.codePointAt(2);
- StringBuffer delete(int inicio, int final): Método que elimina la cadena resultante desde la posición inicial hasta la final.
- sb.delete(3,7);
- StringBuffer deleteCharAt(int n): Método que elimina el carácter de la posición pasada por argumentos.
- sb.deleteCharAt(2);
- int indexOf(String cad): Método que devuelve el indice donde comienza la subcadena pasada por argumentos.
- int n=sb.indexOf("Mun");
- StringBuffer insert(int pos, char c): Método que inserta en la posición pasada por el primer argumento, el carácter pasado en el segundo argumento. IMPORTANTE: Como anteriormente nos pasaba con append(), este método esta sobrecargado para poder insertar todo tipo de datos, primitivos, booleanos, String....Pasaos por la API para verlos todos.
- sb.insert(2, 'c');
- int length(): Método que devuelve el número de caracteres que tiene nuestra cadena.
- int n=sb.length();
- StringBuffer replace(int inicio, int final, String cadena): Método que reemplaza la cadena desde la posición pasada por el primer argumento hasta la posición pasada por el segundo argumento, reemplazándolo por la cadena pasada por tercer argumento.
- sb.replace(3,7, "lalala");
- StringBuffer reverse(): Método que invierte el orden de los caracteres.
- sb.reverse();
Bueno, estos son los más usados, pero no los únicos, podéis verlos en la API.
Bien, como ya dijimos, son iguales para StringBuilder, así que no voy a darle más vueltas. Espero que os sirva.
Un saludo
No hay comentarios:
Publicar un comentario