Cadenas en Java
Cadenas en Java
Cadenas en Java
Introduccion:
En Java las cadenas se tratan de forma diferente a C/C++, donde las cadenas son matrices de
caracteres en las que se indica el final de la cadena con un carcter de valor \0.
En Java las cadenas son objetos de las clases predefinida String o StringBuffer, que estn
incluidas en el paquete java.lang.*.
Siempre que aparecen conjuntos de caracteres entre comillas dobles, el compilador de Java crea
automticamente un objeto String.
Si slo existieran cadenas de slo lectura (String), durante una serie de manipulaciones sobre un
objeto String habra que crear un nuevo objeto para cada uno de los resultados intermedios.
El compilador es ms eficiente y usa un objeto StringBuffer para construir cadenas a partir de las
expresiones, creando el String final slo cuando es necesario. Los objetos StringBuffer se pueden
modificar, de forma que no son necesarios nuevos objetos para albergar los resultados
intermedios.
Los caracteres de las cadenas tienen un ndice que indica su posicin. El primer carcter de una
cadena tiene el ndice 0, el segundo el 1, el tercero el 2 y as sucesivamente. Esto puede sonar
familiar a los programadores de C/C++, pero resultar chocante para aquellos programadores que
provengan de otros lenguajes.
Creacion de Cadenas:
Un String puede crearse como se crea cualquier otro objeto de cualquier clase; mediante el
operador new:
String s = new String("Esto es una cadena de caracteres");
Observese que los literales de cadena de caracteres se indican entre comillas dobles ("), a
diferencia de los caracteres, que utilizan comillas simples (').
Sin embargo tambin es posible crear un String directamente, sin usar el operador new, haciendo
una asignacin simple (como si se tratara de un dato primitivo):
String s = "Esto es una cadena de caracteres";
Ambas expresiones conducen al mismo objeto.
Los Strings no se modifican una vez que se les ha asignado valor. Si se produce una reasignacin
se crea un nuevo objeto String con el nuevo contenido.
Adems la clase String proporciona constructores para crear Strings a partir de arrays de
caracteres y arrays de bytes. Consultar la documentacin del API del JDK para ms detalles.
Concatenacion de Cadenas:
Java define el operador + (suma) con un significado especial cuando las operandos son de tipo
String. En este caso el operador suma significa concatenacin. El resultado de la concatenacin
es un nuevo String compuesto por las dos cadenas, una tras otra. Por ejemplo:
String x = "Concatenar" + "Cadenas";
da como resultado el String "ConcatenarCadenas".
Tambin es posible concatenar a un String datos primitivos, tanto numricos como booleanos y
char. Por ejemplo, se puede usar:
int i
String x = "El valor de i es " + i;
5;
Cuando se usa el operador + y una de las variables de la expresin es un String, Java transforma
la otra variable (si es de tipo primitivo) en un String y las concatena. Si la otra variable es una
referencia a un objeto entonces invoca el mtodo toString() que existe en todas las clases (es un
mtodo de la clase Object).
La Clase String:
La clase String, que pertenece al paquete Java.lang, proporciona mtodos para examinar
caracteres individuales de una cadena de caracteres, comparar cadenas, buscar y extraer
subcadenas, copiar cadenas y convertir cadenas a maysculas o minsculas.
Un objeto String representa una cadena de caracteres no modificable. Por lo tanto, una operacin
como convertir a maysculas no modificar el objeto original sino que devolver un nuevo
objeto con la cadena resultante de esa operacin.
El lenguaje Java proporciona el operador + para concatenar objetos, as como soporte para
convertir otros objetos a objetos String.
La Clase StringBuffer:
En ocasiones los objetos de tipo String, nos generan problemas, debido a que el contenido de un
objeto String no puede ser modificado y cuando requerimos hacer esta accin, el compilador
genera un nuevo objeto String, lo que con el tiempo nos va consumiendo mucha memoria.
El StringBuffer tiene como finalidad resolver estos problemas, es igual que un String, pero con la
caracterstica de que puede ser modificado su valor.
Un stringbuffer implementa una secuencia de caracteres dinmicos.
Las principales operaciones a realizar sobre stringbuffers son append e insert, las cuales pueden
recibir varios tipos de entrada; cada uno de estos mtodos convierte su entrada en string y
posteriormente realiza en insercin o concatenacin segn corresponda.
Metodos comunes de las clases String y StringBuffer:
Existen una serie de mtodos que son comunes a ambas clases.
Los siguientes mtodos de acceso a las cadenas:
String toString(); Devuelve una copia del objeto como una String.
String substring( int i, int fin ); Devuelve una instancia de la clase String que contenga
una subcadena desde la posicin ini, hasta la fin (si no se indica hasta el final de la
cadena), del objeto cadena que invoque el mtodo.
void getChars(int ini, int fin, char[] destino, int destIni); Convierte la cadena en un
vector de caracteres destino.
String( String s ); Crea un nuevo String, copiando el que recibe por parmetro.
String( StringBuffer s ); Crea un String con el valor que en ese momento tenga
el StringBuffer que recibe como parmetro.
String( char[] v ); El nuevo String toma el valor de los caracteres que tiene el vector de
caracteres recibido por parmetro.
String( byte[] v ); El nuevo String toma el valor de los caracteres que corresponden a los
valores del vector de bytes en el sistema de caracteres de la ordenador en que se ejecute.
int indexOf( char ch, int start ): Devuelve el ndice correspondiente a la primera aparicin
del carcter ch en la cadena, comenzando a buscar desde el carcter start (si no se
especifica se busca desde el principio).
int indexOf( String str ): Devuelve el ndice correspondiente al carcter en que empieza la
primera aparicin de la subcadena str.
int lastIndexOf( char ch, int start ): Devuelve el ndice correspondiente a la ltima
aparicin del carcter ch en la cadena, comenzando a buscar desde el carcter start (si no
se especifica se busca desde el final).
Hay que tener en cuenta que si nos salimos del rango 0-255 que coincide con el
cdigo ASCII puede que las comparaciones no sean las esperadas.
Las funciones de comparacin son las siguientes:
boolean regionMatches( boolean b, int o, String s , int i, int n ); Compara parte de dos
cadenas, carcter a carcter.
int compareTo( Object o ); Devuelve un entero que es menor, igual o mayor que cero
cuando la cadena sobre la que se le invoca es menor, igual o mayor que la otra. Si el
parmetro es un String, la comparacin es lxica.
String replace( char oldChar, char newChar ); Devuelve una nueva cadena con todos los
caracteres oldChar sustituidos por el carcter newChar.
String toLowerCase(); Devuelve una nueva cadena con los caracteres en minsculas, o si
se especifica parmetro, siguiendo sus reglas.
String toUperCase( Locale l ); Devuelve una nueva cadena con los caracteres en
maysculas, o si se especifica parmetro, siguiendo sus reglas.
static String trim(): Devuelve una nueva cadena del que se ha eliminado los espacios en
blanco por el principio y por el final.
static String copyValueOf( char[] v, int ini, int fin ); Devuelve una cadena igual que la
contenida en el vector v, entre los lmites ini y fin (si no se especifican copia todo el
vector).
static String concat( String s ); Concatena la cadena que recibe al final de sta.
static String valueOf( tipo ); El parmetro tipo soporta un carcter (char) un vector de
caracteres (char[]) o un objeto (Object).
Sin embargo para convertir el valor de una cadena en un tipo de datos simple deberemos utilizar
los siguientes mtodos:
Tipo
De String
boolean
new Boolean(String).booleanValue()
int
long
float
new Float(String).floatValue()
double
new Double(String).doubleValue()
Tambin existen diversos constructores y mtodos de la clase String para tratar con vectores,
tanto de caracteres como de bytes.
En cuanto a los vectores de caracteres existen:
El constructor ya citado de String( char[] v ). Hace copia de los datos, por lo que las
modificaciones posteriores del vector no afectarn a la cadena.
En cuanto a los mtodos para convertir vectores de byte (de 8 bits) en objetos String con
caracteres Unicode de 16 bits existen:
El constructor ya citado de String( byte[] v ). Hace copias de los datos, por lo que las
modificaciones posteriores del vector no afectarn a la cadena.
StringBuffer( int lim ); Construye una cadena sin caracteres y con una capacidad inicial
de lim caracteres (por defecto 16, si no se especifica otro valor).
void setCharAt( int i, char to ); Cambia el carcter de la posicin i por to. Si la posicin
supera la longitud de la cadena, se extiende rellenndose con caracteres nulos.
StringBuffer replace( int ini, int fin, String s ); Reemplaza una subcadena de esta cadena
(de ini a fin) por la cadena recibida por parmetro. No se debe confundir con el
mtodo replace() que incluye la claseString.
Y mtodos de borrado:
StringBuffer delete( int ini, int fin ); Borra la subcadena entre el carcter ini y el fin.
void ensureCapacity( int i );. Garantiza que la capacidad del buffer es al menos i.