Uso de String en Java
Uso de String en Java
operarlas
Introduccin
Una cadena es una secuencia de caracteres. Las cadenas son una parte fundamental de la mayora de los
programas, as pues Java tiene varias caractersticas incorporadas que facilitan la manipulacin de
cadenas. Java tiene una clase incorporada en el paquete java.lang que encapsula las estructuras de datos
de una cadena. Esta clase, llamada String es la representacin como objeto de una matriz de caracteres
que no se puede cambiar. Hay una clase que la acompaa, llamada StringBuffer, que se utiliza para
crear cadenas que pueden ser manipuladas despus de ser creadas.
String y StringBuffer
El paquete java.lang contiene dos clases de cadenas: String y StringBuffer. La clase String se utiliza
cuando se trabaja con cadenas que no pueden cambiar. Por otro lado, StringBuffer, se utiliza cuando se
quiere manipular el contenido de una cadena. El entorno de desarrollo Java proporciona dos clases para
manipular y almacenar datos del tipo carcter: String, para cadenas constantes, y StringBuffer, para
cadenas que pueden cambiar.
Como son constantes, los Strings son ms econmicos (utilizan menos memoria) que los StringBuffers
y pueder ser compartidos. Por eso es importante utilizar String siempre que sea apropiado.
Creacin de cadenas
Muchos Strings se crean a partir de cadenas literales. Cuando el compilador encuentra una serie de
caracteres entre comillas (" y "), crea un objeto String cuyo valor es el propio texto. El esquema general
es el siguiente: String nombre="cadena"; Cuando el compilador encuentra la siguente cadena, crea
un objeto String cuyo valor es Hola Mundo.
"Hola Mundo"
o tambin
String s = "Hola Mundo"
Tambin se pueden crear objetos String como se hara con cualquier otro objeto Java: utilizando new.
String s = new String("Hola Mundo.");
El constructor anterior es equivalente pero es mucho ms eficiente el primer mtodo ya que, el segundo
mtodo crea dos objetos String en vez de slo uno.
Se pueden utilizar cadenas literales en cualquier lugar donde se pueda utilizar un objeto String. Por
ejemplo, System.out.println() acepta un argumenteo String, por eso se puede utilizar una cadena literal
en su lugar:
System.out.println("Hola Mundo!");
Uso de cadenas
Concatenacin de cadenas
Java permite concatenar cadenas facilmente utilizando el operador +. El siguiente fragmento de cdigo
concatena tres cadenas para producir su salida:
"La entrada tiene " + contador + " caracteres."
Dos de las cadenas concatenadas son cadenas literales: "La entrada tiene " y " caracteres.". La tercera
cadena - la del medio- es realmente un entero que primero se convierte a cadena y luego se concatena
con las otras.
Longitud de cadenas
uno de los mtodos mas habituales que se utilizan en un String es length, que devuelve el n. de
caracteres de una cadena:
String s = "abc";
System.out.println(s.length());
El resultado de ejecutar el cdigo anterior, sera la impresin de 3, que se corresponde con la longitud
llamada s.
Un punto interesante en Java es que se crea una instancia de objeto para cada literal String, por lo que
se puede llamar a los mtodos directamente con una cadena entre comillas, como si fuera una
referencia a objeto, con este ejemplo se volvera a imprimir un 3:
String s = "abc";
System.out.println("abc".lenght());
Extraccin de caracteres
Para extraer un nico carcter de una cadena, se puede referir a un carcter indexado mediante el
mtodo charAt, la sintaxis es la siguiente Objeto_cadena.charAt(ndice);
"abc".charAt(1)
Devolver 'b'
Si se necesita extraer ms de un carcter a la vez, puede utilizar el mtodo getChars, que le permite
especificar el ndice del primer carcter y del ltimo ms uno que se desean copiar, adems de la matriz
char donde se desean colocar dichos caracteres.
String s = "Esto no es una cancin";
char buf[] = new char[2];
s.getChars(5, 7, buf, 0);
buf ahora tendr el valor 'no'
Tambin existe una funcin til llamada toCharArray, que devuelve una matriz de char que contiene
la cadena completa.
Comparacin de cadenas
Si se desean comparar dos cadenas para ver si son iguales, puede utilizar el mtodo equals de String.
Devolver true si el nico parmetro est compuesto de los mismos caracteres que el objeto con el que
se llama a equals. Una forma alternativa de equals llamada equalsIgnoreCase ignora si los caracteres
de las cadenas que se comparan estn en maysculas o minsculas.
Objeto_cadena1.equals(Objeto_cadena2);
Objeto_cadena1.equalsIgnoreCase(Objeto_cadena2);
Veamos ahora un ejemplo:
String cadena1="pepe";
String cadena2="juan";
if (cadena1.equals(cadena2))
{
//Ambas cadenas son iguales (no es el caso)
}
{
//Ambas cadenas son iguales (es el caso)
}
Igualdad
El mtodo equals y el operador = = hacen dos pruebas completamente diferentes para la igualdad.
Mientras que el mtodo equals compara los caracteres contenidos en una String, el operador = =
compara dos referencias de objeto para ver si se refieren a la misma instancia. Por tanto, no podemos
usar el signo == por que esta sera una comparacin binaria de punteros a memoria y no nos devolvera
el valor correcto
Comparacin con CompareTo
Si lo que queremos es comparar cadenas para ordenarlas, una opcin es usar el mtodo compareTo() de
la clase String. Este mtodo devuelve 0 si ambas cadenas tienen el mismo contenido, negativo si el
String es menor -va antes- que el parmetro que se le pasa y positivo si es mayor. Es decir:
if (cadena1.compareTo(cadena2) == 0)
System.out.println("cadena1 y cadena2 son iguales");
else
if (cadena1.compareTo(cadena2) < 0)
System.out.println ("cadena1 va antes que cadena2");
else
if (cadena1.compareTo(cadena2) > 0)
System.out.println("cadena2 va despus que cadena1");
Bsqueda en la cadena
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.
Objeto_cadena.indexOf(carcter);
Objeto_cadena.indexOf(cadena);
Objeto_cadena.lastIndexOf(carcter);
Objeto_cadena.lastIndexOf(cadena);
StringBuffer
StringBuffer es una clase gemela de String que proporciona gran parte de la funcionalidad de la
utilizacin habitual de las cadenas. StringBuffer representa secuencias de caracteres que se pueden
ampliar y modificar. Java utiliza ambas clases con frecuencia, pero muchos programadores slo tratan
con String y permiten que Java manipule StringBuffer por su cuenta mediante el operador sobrecargado
'+'.
Creacin
StringBuffer nombre=new StringBuffer(cadena);
Capacidad Reserva 16 espacios aunque ya tengamos algo escrito. Con la segunda lnea lo que haces es
indicar el numero de espacios que vas a reservar.
Objeto_cadena.capacity();
Objeto_cadena.ensureCapacity(n);
ModificarPermite modificar un carcter en una determinada posicin.
Objeto_cadena.SetcharAt(posicin,nuevo carcter);
InsertarAade en una determinada posicin un carcter o una cadena.
Objeto_cadena.insert(posicion,carcter);
Objeto_cadena.insert(posicion,cadena);
Ejemplo:
StringBuffer sb = new StringBuffer("Bebe Caliente!");
sb.insert(6, "Java ");
System.out.println(sb.toString());
El ejemplo anterior imprimira:
Bebe Java Caliente!
Espacio si/noPara saber si el contenido de una variable es un espacio. Devuelve true en caso de ser un
espacio.
Character.IsSpace(objeto_carcter);
Nmero o carcterPara saber si el contenido de una variable es un nmero o un carcter. Devuelve
true cuando es un nmero.
Character.isDigit(variable_char);
Al mtodo append de StringBuffer se le llama a menudo a travs del operador +. Tiene versiones
sobrecargadas para todos los tipos. Se llama a String.valueOf para cada parmetro y el resultado se
aade al StringBuffer actual. Cada versin de append devuelve el propio buffer.
A contiuacin vemos un ejemplo de la modificacin de un stringbuffer con el mtodo append:
class ReverseString {
dest.append(source.charAt(i));
return dest.toString();
}
}
El mtodo reverseIt() utiliza el mtodo append() de StringBuffer para aadir un carcter al final de la
cadena de destino: dest. Si la adiccin de caracteres hace que aumente el tamao de StringBuffer ms
all de su capacidad actual, el StringBuffer asigna ms memoria. Como la asignacin de memoria es
una operacin relativamente cara, debemos hacer un cdigo ms eficiente inicializando la capacidad
del StringBuffer de forma razonable para el primer contenido, as minimizaremos el nmero de veces
que se tendr que asignar memoria. Por ejemplo, el mtodo reverseIt() construye un StringBuffer con
una capacidad inicial igual a la de la cadena fuente, asegurndose slo una asignacin de memoria para
dest. La versin del mtodo append() utilizado en reverseIt() es slo uno de los mtodos de
StringBuffer para aadir datos al final de un StringBuffer. Existen varios mtodos append() para aadir
varios tipos, como float, int, boolean,e incluso objetos, al final del StringBuffer. El dato
Conversin de objetos a Strings
toString()
A veces es conveniente o necesario convertir un objeto a una cadena o String porque se necesitar
pasarlo a un mtodo que slo acepta Strings. Por ejemplo, System.out.println() no acepta StringBuffers,
por lo que necesita convertir el StringBuffer a String para poder imprimirlo. El mtodo reverseIt()
utiliza el mtodo toString() de StringBuffer para convertirlo en un String antes de retornar.return
dest.toString();
class ReverseString {
public static String reverseIt(String source) {
int i, len = source.length();
StringBuffer dest = new StringBuffer(len);
for (i = (len - 1); i >= 0; i--) {
dest.append(source.charAt(i));
}
return dest.toString();
}
}
Todas las clases heredan toString() desde la clase Object y muchas clases del paquete java.lang
sobreescriben este mtodo para proporcionar una implementacin ms acorde con la propia clase. Por
ejemplo, las clases Character, Integer, Boolean, etc.. sobreescriben toString() para proporcionar una
representacin en String de los objetos.
valueOf
Como es conveniente, la clase String proporciona un mtodo esttico valueOf(). Se puede utilizar este
mtodo para convertir variables de diferentes tipos a un String. Por ejemplo, para imprimir el nmero
pi:
System.out.println(String.valueOf(Math.PI));