Sunteți pe pagina 1din 16

FACULTAD DE INGENIERA ESCUELA PROFESIONAL DE INGENIERA DE SISTEMAS

String y StringBuffer

CURSO

Tecnologa de la Programacin

DOCENTE

Ing. Zoraida Vidal Melgarejo

ALUMNO

: SOLANO QUINCHO, Giancarlo

CICLO

IV

TRUJILLO PER 2011

STRING Y STRINGBUFFER EN JAVA

9 de octubre de 2011

STRING Y STRINGBUFFER EN JAVA


I. INTRODUCCIN
Un string es una secuencia finita de caracteres. En Java, es una secuencia de chars. La propiedad ms distintiva e importante de los objetos String en java es que son inmutables. No existe ningn mtodo en la clase String que modifique al objeto sobre el que se invoca. Todos los mtodos de manipulacin de strings devuelven uno nuevo. Por ejemplo str.trim() en otro lenguaje modificara str, quitndole espacios por delante y por detrs. No es as en Java. Este cdigo no hace lo que un programador nave podra llegar a pensar:
void saludar(String str) { str.trim(); System.out.println("Hola, " + str + "!"); }

Lo que est pasando en este pedacito de codigo es que la lnea del trim crea un nuevo String. Este nuevo string es desechado, ignorado, descartado, al no ser asignado a ninguna variable. Luego, se usa str, que es exactamente el mismo que fue pasado originalmente como parmetro (o sea que el trim termina no teniendo ningn efecto). El cdigo correcto sera:
void saludar(String str) { str = str.trim(); System.out.println("Hola, " + str + "!"); }

Por qu a los diseadores de Java se les ocurri hacer algo tan raro? Es por eficiencia y seguridad. Supongamos que existe un mtodo change() que s modifica al objeto. Supongamos tambin que tenemos una clase nuestra, con un campo privado llamado nombre. No queremos permitir que nadie por fuera de la clase cambie el nombre. Por eso hacemos un mtodo getNombre() que devuelve ese campo, y no hacemos ningn setNombre(). Ahora, si existe change()... qu nos impide hacer o.getNombre().change("Jorge"); ? La nica forma de evitar esto sera que getNombre() no devuelva el campo nombre, sino que construya un nuevo objeto, una copia, cada vez que se lo invoca. Eso sera ms lento y ocupara ms memoria.

TECNOLOGA DE LA PROGRAMACIN I

STRING Y STRINGBUFFER EN JAVA

9 de octubre de 2011

El diseo actual de los strings de Java permite que en un momento dado de la ejecucin de una aplicacin, un mismo objeto String pueda estar siendo referido desde cientos de clases que no tienen relacin entre s, y sin que esto represente una violacin de seguridad para ninguna de ellas. Todo esto no es una cuestin terica, es necesario saberlo al programar en Java. Supongamos que tenemos todo el texto de una novela en una variable de tipo String. Cientos de miles de letras. Queremos aadirle 2008 al final:
novela = novela + " 2008";

Ahora bien, el objeto novela original... es desechado! Su contenido es copiado a uno nuevo, que adems tiene el texto aadido. Copiar cientos de miles de caracteres... no es algo muy eficiente. Bueno, si lo hacemos una sola vez puede que no nos demos cuenta... pero... si nos estn envando la novela letra por letra?
String novela = ""; while(true) { char letra; letra = damePrximaLetraDeLaNovela(); if( letra == null ) break; novela = novela + letra; // auch! }

Imaginemos que este programa es una persona. Es un laborioso copiador de novelas. Muy laborioso. Cada vez que aparece una nueva letra que anotar... copia todo lo que haba escrito hasta ese momento en otro lado, kuego aade la letra nueva y posteriormente quema todo su trabajo anterior. Cuntas letras termina escribiendo? Para una novela de cuatro letras escribe primero una, luego dos, luego tres y por ltimo escribe todas las cuatro letras. Para una novela de 100.000 letras escribe... 4.999.950.000 letras! (en general, para una novela de n letras escribe n(n 1) 2 letras). Una manera de solucionar esto sera ir armando la novela en un array comn, un array de char. Claro que los arrays tienen un tamao fijo, por lo que habra que ir copiando cada tanto el array cuando la capacidad anterior se ve alcanzada. Es decir,

TECNOLOGA DE LA PROGRAMACIN I

STRING Y STRINGBUFFER EN JAVA

9 de octubre de 2011

si primero estimamos que la novela tendr 100 letras, al llenarse el array hay que crear uno nuevo de, por ejemplo 200 letras y copiar el contenido que ya tena el viejo de 100. Como se ve, es necesaria toda una lgica. Java tiene una clase que implementa internamente esta lgica. Una clase que encapsula, encierra, precisamente el manejo de un array que se va extendiendo, y en el que adems podemos cambiar las letras del medio. Esta clase es StringBuilder, y debe considerrsela como un laboratorio de Strings. Un StringBuilder es el tero en el que un String se puede ir gestando, creciendo, armndose. Al final, el mtodo toString() nos da el String listo para consumo humano (o ciberntico, bah). El cdigo que recibe la novela se vera entonces as:
StringBuilder sb = new StringBuilder(); while(true) { char letra; letra = damePrximaLetraDeLaNovela(); if( letra == null ) break; sb.append(letra); // muy bien!!! =) } String novela = sb.toString();

Antes de que apareciera StringBuilder se usaba StringBuffer, la diferencia es que la segunda permite ser utilizada desde varios threads a la vez (cosa intil que la hace ms lenta).

Un detalle interesante extra: Hay algo ms que Java puede hacer slo porque los Strings son inmutables. Cuando obtenemos un substring, es decir, cuando extraemos una seccin de un string, Java no copia las letras. El substring es un nuevo objeto s, pero que apunta internamente al mismo array. Es decir quenovela.substring(1000, 1010) da un String que tiene los caracteres del 1000 al 1009, pero para obtenerlo Java no copi las cientos de miles de letras! Esto no podra hacerse si el String original pudiera ser cambiado, ya que el cambio podra estar afectando a la seccin.

TECNOLOGA DE LA PROGRAMACIN I

STRING Y STRINGBUFFER EN JAVA


II. STRING

9 de octubre de 2011

1. LA CLASE STRING En Java no existe un tipo de datos primitivo que sirva para la manipulacin de cadenas de caracteres. En su lugar se utiliza una clase definida en la API que es la clase String. Esto significa que en Java las cadenas de caracteres son, a todos los efectos, objetos que se manipulan como tales, aunque existen ciertas operaciones, como la creacin de Strings, para los que el lenguaje tiene soporte directo, con lo que se simplifican algunas operaciones. La clase String forma parte del package java.lang y se describe completamente en la documentacin del API del JDK.

2. CREACIN DE STRING

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. 3. CONCATENACIN DE STRING 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". TECNOLOGA DE LA PROGRAMACIN I 5

STRING Y STRINGBUFFER EN JAVA

9 de octubre de 2011

Tambin es posible concatenar a un String datos primitivos, tanto numricos como booleanos y char. Por ejemplo, se puede usar: int i = 5; String x = "El valor de i es " + i; 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).

4. MTODOS MAS IMPORTANTES

1. String (String valor) .- Se usa cuando se desea crear una cadena de caracteres : String cadena = Hola String cadena = new String (Hola); //Constructor de la clase String 2. cadena.concat(string txt) .- Devuelve como resultado un nuevo objeto String resultado de concatenar dos cadena : String cadena = Hola String result= cadena.concat(" Mundo");//El resultado ser Hola mundo 3. cadena.compareTo(String otra cadena) .- Compara lexicogrficamente la cadena con otra cadena , esta comparacin es caracter por caracter teniendo en cuenta que las maysculas son mayores que las minsculas esto es de acuerdo al cdigo ASCII o UNICODE segn esto devuelve : < 0 : si cadena < otra cadena = 0 : si cadena = otra cadena >0 : si cadena > otra cadena Ejemplo : JUAN > juan Juan > Carlos JUAN > JUAn abcde > abcdefg 4. cadena.toIgnoreCase(String otra cadena) .- Hace lo mismo que compareTo pero con la nica diferencia que no se hace diferencia entre maysculas y minsculas ; es decir : JUAN = juan

TECNOLOGA DE LA PROGRAMACIN I

STRING Y STRINGBUFFER EN JAVA

9 de octubre de 2011

5. cadena.length() .- Devuelve la longitud o nmero de caracteres de la cadena

String cad="Hola Mundo"; int cant = cad.length();// El valor de cant ser 10

6. cadena.toLowerCase() .- Convierte a minsculas las letras maysculas de la cadena 7. cadena.toUpperCase().- Convierte en maysculas las letras minsculas de la cadena.

String cad1="Esto Es Una Prueba"; String cad2=cad1.toUpperCase();//cad2 ser igual a : ESTO ES UNA PRUEBA.

8. cadena.trim () .- Elimina los espacios en blanco que puedan haber al principio o al final de la cadena.

String cad1="

Esto Es Una Prueba ";

String cad2=cad1.toLowerCase();//cad2=Esto Es Una Prueba.

5. DEMS MTODOS 6.

CONSTRUCTORES Constructor String( ) Descripcin Crea un nuevo objeto String vaco sin caracteres. Crea un nuevo objeto String inicializado String (byte[ ] bytes) con los caracteres equivalentes a cada nmero guardado en el arreglo de bytes. Crea un nuevo objeto String inicializado String (char[ ] value) con los caracteres contenidos en el arreglo dado como parmetro. String (String cadena) Crea un nuevo objeto String inicializado con el valor dado como parmetro.

TECNOLOGA DE LA PROGRAMACIN I

STRING Y STRINGBUFFER EN JAVA

9 de octubre de 2011

MTODOS Tipo de retorno char Mtodo Descripcin Retorna el carcter correspondiente al ndice dado como parmetro. Retorna como entero el resultado de la comparacin entre la cadena que lo llama compareTo(String otraCadena) con otraCadena. Si el parmetro devuelto es "0" significa que las dos cadenas son iguales; realizndose la comparacin carcter con carcter diferencindose las maysculas con las minsculas. Retorna como entero el resultado de la comparacin de la cadena que lo llama compareToIgnoreC con otraCadena. Si ste entero es 0 int ase(String otraCadena) significa que ambas cadenas son iguales; siendo la comparacin carcter con carcter pero ignorando la diferencias entre maysculas y minsculas. Retorna el resultado de la concatenacin String concat(String otraCadena) equals(Object otroObjeto ) de la cadena con otraCadena dada como parmetro. Retorna true si la cadena que lo llama es igual al objeto enviado como parmetro. Retorna true si la cadena que lo llama es boolean equalsignoreCase( igual a la cadena dad como parmetro String otraCadena) ignorando las diferencias entre maysculas y minsculas. Retorna la posicin de la primera int indexOf (String cad) ocurrencia encontrada de la cadena dada como parmetro dentro de la cadena que llama al mtodo.
TECNOLOGA DE LA PROGRAMACIN I 8

charAt(int index)

int

boolean

STRING Y STRINGBUFFER EN JAVA

9 de octubre de 2011

Retorna la posicin de la primera indexOf (String cad, int ini) ocurrencia encontrada de la cadena dada como parmetro pero comenzando la bsqueda desde la posicin ini dada como parmetro. Retorna la posicin de la ltima int lastIndexOf (String ocurrencia de la cadena dada como cad) parmetro. Retorna la posicin de la ltima int lastIndexOf (String ocurrencia de la cadena dada como cad,int ini) parmetro buscando en retroceso a partir de la posicin dada como parmetro. int length ( ) Retorna el nmero de caracteres que contiene la cadena. Retorna una nueva cadena como String replace (char car1,char car2) resultado de reemplazar todas las ocurrencias del carcter "car1" por el carcter "car2" dados como parmetros. Retorna una nueva cadena como resultado de reemplazar todas las replaceAll (String cad1,String cad2) concurrencias de la sub cadena cad1 por la sub cadena cad2 dada como parmetro. Retorna true si la cadena que llama al boolean startsWith (String cad) subString(int posIni) mtodo empieza con la subcadena cad dada como parmetro. Retorna una subcadena cuyo primer carcter empieza en la posicin posIni dada como parmetro. Retorna una subcadena cuyo primer String subString(int posIni,int posFin) carcter empieza en la posicin posIni y termina con el carcter de la posicin posFin.
TECNOLOGA DE LA PROGRAMACIN I 9

int

String

String

STRING Y STRINGBUFFER EN JAVA

9 de octubre de 2011

Retorna una nueva cadena como String toLowerCase( ) resultado de convertir todos los caracteres a minsculas. Retorna una nueva cadena como String toUpperCase ( ) resultado de convertir todos los caracteres a maysculas. Retorna una nueva cadena como String trim ( ) resultado de omitir los espacios en blanco al inicio y al final de la cadena.

7. CONVERSIONES

Convertir Un String A Un Numero

Cuando introducimos caracteres en un control de edicin a veces es inevitable que aparezcan espacios ya sea al comienzo o al final. Para eliminar estos espacios tenemos la funcin miembro trim String str=" 12 "; String str1=str.trim(); Para convertir un string en nmero entero, primero quitamos los espacios en blanco al principio y al final y luego, llamamos a la funcin miembro esttica parseInt de la clase Integer (clase envolvente que describe los nmeros enteros) String str=" 12 "; int numero=Integer.parseInt(str.trim()); Para convertir un string en nmero decimal (double) se requieren dos pasos: convertir el string en un objeto de la clase envolvente Double, mediante la funcin miembro esttica valueOf, y a continuacin convertir el objeto de la claseDouble en un tipo primitivo double mediante la funcin doubleValue String str="12.35 "; double numero=Double.valueOf(str).doubleValue(); Se puede hacer el mismo procedimiento para convertir un string a nmero entero String str="12"; int numero=Integer.valueOf(str).intValue();

TECNOLOGA DE LA PROGRAMACIN I

10

STRING Y STRINGBUFFER EN JAVA


A. String a float Float.parseFloat(String) Devuelve un float B. String a int Integer.parseInt(String) Devuelve un int C. float a String String.valueOf(int) Devuelve un string D. Int a String String.valueOf(float)Devuelve un string

9 de octubre de 2011

8. TRABAJANDO CON SUBCADENAS FUNCIONES DE COMPARACIN DE SUBCADENAS boolean regionMatch( int thisoffset,String s2,int s2offset,int len ); boolean regionMatch( boolean ignoreCase,int thisoffset,String s2, int s2offset,int 1 ); Comprueba si una regin de esta cadena es igual a una regin de otra cadena. boolean startsWith( String prefix ); boolean startsWith( String prefix,int offset ); boolean endsWith( String suffix ); Devuelve si esta cadena comienza o termina con un cierto prefijo o sufijo comenzando en un determinado desplazamiento. int indexOf( int ch ); int indexOf( int ch,int fromindex ); int lastIndexOf( int ch ); int lastIndexOf( int ch,int fromindex ); int indexOf( String str ); int indexOf( String str,int fromindex ); int lastIndexOf( String str ); int lastIndexOf( String str,int fromindex ); Devuelve el primer/ltimo ndice de un carcter/cadena empezando la bsqueda a partir de un determinado desplazamiento. String substring( int beginindex ); String substring( int beginindex,int endindex ); TECNOLOGA DE LA PROGRAMACIN I 11

STRING Y STRINGBUFFER EN JAVA


String concat( String str ); String replace( char oldchar,char newchar ); String toLowerCase(); String toUpperCase(); String trim(); Ajusta los espacios en blanco al comienzo y al final de la cadena. void getChars( int srcBegin,int srcEnd,char dst[],int dstBegin ); void getBytes( int srcBegin,int srcEnd,byte dst[],int dstBegin ); String toString(); char toCharArray(); int hashCode(); FUNCIONES VALUEOF

9 de octubre de 2011

La clase String posee numerosas funciones para transformar valores de otros tipos de datos a su representacin como cadena. Todas estas funciones tienen el nombre de valueOf, estando el mtodo sobrecargado para todos los tipos de datos bsicos. Veamos un ejemplo de su utilizacin: String Uno = new String( "Hola Mundo" ); float f = 3.141592;

String PI = Uno.valueOf( f ); String PI = String.valueOf( f ); FUNCIONES DE CONVERSIN // Mucho ms correcto

String valueOf( boolean b ); String valueOf( int i ); String valueOf( long l ); String valueOf( float f ); String valueOf( double d ); String valueOf( Object obj ); String valueOf( char data[] ); String valueOf( char data[],int offset,int count ); TECNOLOGA DE LA PROGRAMACIN I 12

STRING Y STRINGBUFFER EN JAVA


Usa arrays de caracteres para la cadena.

9 de octubre de 2011

String copyValueOf( char data[] ); String copyValueOf( char data[],int offset,int count ); Crea un nuevo array equivalente para la cadena.

III. STRINGBUFFER Java posee gran capacidad para el manejo de cadenas dentro de sus

clases String y StringBuffer. Un objeto String representa una cadena alfanumrica de un valor constante que no puede ser cambiada despus de haber sido creada. Un objeto StringBuffer representa una cadena cuyo tamao puede variar. La clase StringBuffer dispone de muchos mtodos 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 ms recursos del sistema, permiten ese tipo de manipulaciones. Al estar la mayora de las caractersticas de los StringBuffers basadas en su tamao variable, se necesita un nuevo mtodo de creacin: StringBuffer(); StringBuffer( int len ); StringBuffer( String str ); Se puede crear un StringBuffer vaco de cualquier longitud y tambin se puede utilizar un String como punto de partida para un StringBuffer. StringBuffer Dos = new StringBuffer( 20 ); StringBuffer Uno = new StringBuffer( "Hola Mundo" ); 1. CAMBIO DE TAMAO El cambio de tamao de un StringBuffer necesita varias funciones especficas para manipular el tamao de las cadenas: int length(); char charAt( int index ); void getChars( int srcBegin,int srcEnd,char dst[],int dstBegin ); TECNOLOGA DE LA PROGRAMACIN I 13

STRING Y STRINGBUFFER EN JAVA


String toString(); void setLength( int newlength ); void setCharAt( int index,char ch ); int capacity(); void ensureCapacity( int minimum ); void copyWhenShared();

9 de octubre de 2011

Obervar que una de las funciones devuelve una cadena constante normal de tipo String. Este objeto se puede usar con cualquier funcin String, como por ejemplo, en las funciones de comparacin. 2. MODIFICACIN DEL CONTENIDO Para cambiar el contenido de un StringBuffer, se pueden utilizar dos mtodos: append() e insert(). En el ejemplo CadAppend.java, vemos el uso de estos dos mtodos: class CadAppend { public static void main( String args[] ) { StringBuffer str = new StringBuffer( "Hola" ); str.append( " Mundo" ); System.out.println( str ); } } En este otro ejemplo, CadInversa.java, mostramos un mtodo muy simple que le da la vuelta a una cadena: class CadInversa { public static String cadenaInversa( String fuente ) { int longitud = fuente.length();

StringBuffer destino = new StringBuffer( longitud ); for( int i=(longitud-1); i >= 0; i-- ) destino.append( fuente.charAt( i ) );

return( destino.toString() ); TECNOLOGA DE LA PROGRAMACIN I 14

STRING Y STRINGBUFFER EN JAVA


} public static void main( String args[] ) { System.out.println( cadenaInversa( "Hola Mundo" ) ); } } Las funciones que cambian el tamao son pues: StringBuffer append( Object obj ); StringBuffer append( String str ); StringBuffer append( char str[] ); StringBuffer append( char str[],int offset,int len ); StringBuffer append( boolean b ); StringBuffer append( int i ); StringBuffer append( long l ); StringBuffer append( float f ); StringBuffer append( double d ); StringBuffer append( char ch ); StringBuffer insert( int offset,Object obj ); StringBuffer insert( int offset,String str ); StringBuffer insert( int offset,char str[] ); StringBuffer insert( int offset,boolean b ); StringBuffer insert( int offset,int i ); StringBuffer insert( int offset,long l ); StringBuffer insert( int offset,float f ); StringBuffer insert( int offset,double d ); StringBuffer insert( int offset,char ch ); 3. OPERADORES DE CONCATENACIN

9 de octubre de 2011

Hay que recordar que los operadores "+" y "+=" tambin se pueden aplicar a cadenas. Ambos realizan una concatenacin y estn implementados con objetos StringBuffer. Por ejemplo, la sentencia: String s = "Qu" + " tal ?";

TECNOLOGA DE LA PROGRAMACIN I

15

STRING Y STRINGBUFFER EN JAVA


es interpretada por el compilador como: String s =

9 de octubre de 2011

new StringBuffer().append( "Qu" ).append( " tal ?" ).toString(); y se marcara el StringBuffer para borrarlo ya que el contenido pasa al objeto String. Tambin, la sentencia: s += " por ah!"; sera interpretada por el sistema como: String s = new StringBuffer().append( s ).append( " por ah!" ).toString(); y volvera a marcar para borrar el nuevo StringBuffer.

IV. LINKOGRAFA

http://www.reloco.com.ar/prog/java/strings.html http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clases1/string.ht m http://www.arrakis.es/~abelp/ApuntesJava/Strings.htm http://sunsite.dcc.uchile.cl/java/docs/JavaTut/Cap3/string.html http://sunsite.dcc.uchile.cl/java/docs/JavaTut/Cap3/conver.html http://javax0711.blogspot.com/2009/11/la-clase-string.html http://leepoint.net/notes-java/data/strings/23stringbufferetc.html

TECNOLOGA DE LA PROGRAMACIN I

16

S-ar putea să vă placă și