Sie sind auf Seite 1von 8

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:

int length(); Devuelve el nmero de caracteres de la cadena.

char charAt( int i ); Devuelve el carcter correspondiente de ndice i.

Los siguientes mtodos para crear cadenas derivadas:

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.

Y el mtodo para transformar la cadena en un vector de caracteres:

void getChars(int ini, int fin, char[] destino, int destIni); Convierte la cadena en un
vector de caracteres destino.

Metodos de la Clase String:


a.) Constructores
La clase String proporciona cadenas de slo lectura y soporta operaciones con ellas. Se pueden
crear cadenas implcitamente mediante una cadena entrecomillada o usando + += con dos
objetos String.

Tambin se pueden crear objetos String explcitamente con el mecanismo new.


La clase String soporta multitud de constructores.

String(); Constructor por defecto. El nuevo String toma el valor "".

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.

b.) Bsqueda en cadenas String


Adems presenta los siguientes mtodos para buscar caracteres o subcadenas en la cadena, y
devuelven el ndice que han encontrado o el valor 1 si la bsqueda no ha sido satisfactoria:

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).

int lastIndexOf( String str ): Devuelve el ndice correspondiente al carcter en que


empieza la ltima aparicin de la subcadena str.

c.) Comparaciones de cadenas String


Java no trabaja con el cdigo ASCII habitual, sino con el cdigo avanzado Unicode.
El cdigo Unicode (cdigo universal) se caracteriza, sobre todo, por el uso de dos bytes por
carcter. Esto permite aumentar los caracteres hasta 65000, y as se pueden representar los
caracteres que componen las lenguas, vivas o muertas, ms importantes del mundo.

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 equals( Object o ); Devuelve true si se le pasa una referencia a un


objeto String con los mismos caracteres, o false si no.

boolean equalsIgnoreCase( String s ); Compara cadenas ignorando las diferencias de


ortografa maysculas/minsculas.

boolean regionMatches( boolean b, int o, String s , int i, int n ); Compara parte de dos
cadenas, carcter a carcter.

boolean startsWith( String s, int i ); Comprueba si la cadena tiene el prefijo s desde i.

boolean endsWith( String s ); Comprueba si la cadena termina con el sufijo s.

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.

int compareToIgnoraCase( String s ); Compara lexicogrficamente, ignorando las


diferencias de ortografa maysculas/minsculas.

d.) Cadenas String derivadas


En Java se devuelven nuevas cadenas cada vez que se invoca a un mtodo que crea una cadena
diferente porque las cadenas String son de slo lectura:

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.

e.) Conversiones entre cadenas String y tipos simples Java


Para convertir una variable de un tipo de datos simple (char, boolean, int, long, float, double) en
una cadena (String), bastar con invocar al mtodo valueOf() del objeto String correspondiente:

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

Integer.ParseInt(String, int base)

long

Long.ParseLong(String, int base)

float

new Float(String).floatValue()

double

new Double(String).doubleValue()

Tabla 20: Conversiones de cadenas a tipos simples


No hay ningn mtodo que convierta los caracteres escapados Java ( \b, \udddd ) en variables
carcter (char), o a la inversa. Lo que se puede hacer es invocar valueOf() con un carcter (char)
para obtener una cadena de la clase String que contenga ese carcter.
As mismo no hay formas de crear o decodificar cadenas de nmeros en formatos octal (0) o
hexadecimal(0x).
f.) Conversiones entre cadenas String y vectores

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.

char[] toCharArray(); Convierte la cadena en un vector de caracteres.

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.

byte[] getBytes( String s ); Convierte la cadena en un vector de byte, atendiendo a la tabla


de caracteres especificada en s, o a la de la mquina si se omite.

Metodos de la Clase StringBuffer:


a.) Constructores
Los constructores contenidos por la clase StringBuffer son:

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).

StringBuffer( String s ); Construye una cadena con el valor s.

b.) Modificacin de la cadena


Existen tres tipos de modificaciones que se pueden aplicar a la cadena.
Hay mtodos de insercin:

StringBuffer insert( int i, Object o ); Desplaza los caracteres de la cadena e inserta la


cadena correspondiente al segundo parmetro (de cualquier tipo).

StringBuffer append( Object o ); Inserta al final de la cadena, la cadena correspondiente


al segundo parmetro (de cualquier tipo).

Hay mtodos de substitucin:

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.

StringBuffer reverse(); Invierte la cadena (de izquierda a derecha).

Y mtodos de borrado:

StringBuffer delete( int ini, int fin ); Borra la subcadena entre el carcter ini y el fin.

StringBuffer deleteCharAt( int i ); Borra el carcter en la posicin i.

c.) Capacidad de la cadena


El buffer de un objeto StringBuffer tiene una capacidad que es la longitud de la cadena que
puede almacenar sin tener que asignar ms espacio. El buffer crece automticamente a medida
que se aaden caracteres, pero resulta ms eficiente especificar el tamao del buffer de una sola
vez:

int capacity(); Devuelve la capacidad actual del buffer.

void ensureCapacity( int i );. Garantiza que la capacidad del buffer es al menos i.

void setLength( int i ); Establece la longitud de esta cadena a i.

d.) Extraccin de datos


Para obtener un objeto String a partir de un objeto StringBuffer, debe invocarse el
mtodo toString(), comn a ambas clases.
Se debe tener en cuenta que no hay mtodos StringBuffer para eliminar una parte de un buffer.
Para resolver este problema, debe crearse un vector de caracteres a partir del buffer, y construir
un nuevo buffer con el contenido restante. Para esto se usa el mtodo getChars(), comn con la
clase String.

Das könnte Ihnen auch gefallen