Cadenas en Java
-
Upload
joaquin-navarro -
Category
Documents
-
view
218 -
download
0
Transcript of Cadenas en Java
-
7/25/2019 Cadenas en Java
1/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 redefinida Stringo StringBuffer, que estn
incluidas en el aquetejava.lang.*.
!iemre que aarecen conjuntos de caracteres entre comillas dobles, el comilador de Java crea
automticamente un objeto String.
!i s"lo e#istieran cadenas de s"lo lectura $String%, durante una serie de maniulaciones sobre un
objeto String&abr'a que crear un nuevo objeto ara cada uno de los resultados intermedios.
El comilador es ms eficiente ( usa un objeto StringBufferara construir cadenas a artir de las
e#resiones, creando el Stringfinal s"lo cuando es necesario. )os objetos StringBufferse ueden
modificar, de forma que no son necesarios nuevos objetos ara alber*ar los resultados
intermedios.
)os caracteres de las cadenas tienen un 'ndice que indica su osici"n. El rimer carcter de una
cadena tiene el 'ndice 0, el se*undo el , el tercero el ( as' sucesivamente. Esto uede sonar
familiar a los ro*ramadores de C/C++, ero resultar c&ocante ara aquellos ro*ramadores que
roven*an de otros len*uajes.
Creacion de Cadenas:
-n !trin* uede crearse como se crea cualquier otro objeto de cualquier clase mediante el
oerador ne
!trin* s 1 new!trin*$2Esto es una cadena de caracteres2%
3bservese que los literales de cadena de caracteres se indican entre comillas dobles $2%, a
diferencia de los caracteres, que utili4an comillas simles $5%.
!in embar*o tambi6n es osible crear un !trin* directamente, sin usar el oerador ne, &aciendo
una asi*naci"n simle $como si se tratara de un dato rimitivo%
!trin* s 1 2Esto es una cadena de caracteres2
7mbas e#resiones conducen al mismo objeto.
-
7/25/2019 Cadenas en Java
2/8
)os !trin*s no se modifican una ve4 que se les &a asi*nado valor. !i se roduce una reasi*naci"n
se crea un nuevo objeto !trin* con el nuevo contenido.
7dems la clase !trin* roorciona constructores ara crear !trin*s a artir de arra(s de
caracteres ( arra(s de b(tes. Consultar la documentaci"n del 789 del J:; ara ms detalles.
Concatenacion de Cadenas:
Java define el oerador + $suma% con un si*nificado esecial cuando las oerandos son de tio
!trin*. En este caso el oerador suma si*nifica concatenaci"n. El resultado de la concatenaci"n
es un nuevo !trin* comuesto or las dos cadenas, una tras otra. 8or ejemlo
!trin* # 1 2Concatenar2 + 2Cadenas2
da como resultado el !trin* 2ConcatenarCadenas2.
sculas no modificar el objeto ori*inal sino que devolver un nuevo
objeto con la cadena resultante de esa oeraci"n.
El len*uaje Java roorciona el oerador + ara concatenar objetos, as' como soorte ara
convertir otros objetos a objetos !trin*.
La Clase StringBuffer:
http://www.arrakis.es/~abelp/ApuntesJava/Herencia2.htm#La%20clase%20Objecthttp://www.arrakis.es/~abelp/ApuntesJava/Herencia2.htm#La%20clase%20Object -
7/25/2019 Cadenas en Java
3/8
En ocasiones los objetos de tio !trin*, nos *eneran roblemas, debido a que el contenido de un
objeto !trin* no uede ser modificado ( cuando requerimos &acer esta acci"n, el comilador
*enera un nuevo objeto !trin*, lo que con el tiemo nos va consumiendo muc&a memoria.
El !trin*?uffer tiene como finalidad resolver estos roblemas, es i*ual que un !trin*, ero con la
caracter'stica de que uede ser modificado su valor.
-n strin*buffer imlementa una secuencia de caracteres dinmicos.
)as rinciales oeraciones a reali4ar sobre strin*buffers son aend e insert, las cuales ueden
recibir varios tios de entrada cada uno de estos m6todos convierte su entrada en strin* (
osteriormente reali4a en inserci"n o concatenaci"n se*>n corresonda.
Metodos comunes de las clases String y StringBuffer:
E#isten una serie de m6todos que son comunes a ambas clases.
)os si*uientes m6todos de acceso a las cadenas
int length() :evuelve el n>mero de caracteres de la cadena.
char charAt( int i );:evuelve el carcter corresondiente de 'ndice i.
)os si*uientes m6todos ara crear cadenas derivadas
String toString();:evuelve una coia del objeto como una String.
String substring( int i, int fin );:evuelve una instancia de la clase Stringque conten*a
una subcadena desde la osici"n ini, &asta lafin$si no se indica &asta el final de la
cadena%, del objeto cadena que invoque el m6todo.
@ el m6todo ara transformar la cadena en un vector de caracteres
void getChars(int ini, int fin, char[] destino, int destni);Convierte la cadena en un
vector de caracteres destino.
Metodos de la Clase String:
a.) Constructores
)a clase Stringroorciona cadenas de s"lo lectura ( soorta oeraciones con ellas. !e ueden
crear cadenas iml'citamente mediante una cadena entrecomillada o usando !" !"con dos
objetos String.
-
7/25/2019 Cadenas en Java
4/8
ltima aarici"n de la subcadenastr.
c.) Comparaciones de cadenas String
Java no trabaja con el c"di*oASC&abitual, sino con el c"di*o avan4ado nicode.
El c"di*o nicode $c"di*o universal% se caracteri4a, sobre todo, or el uso de dos b(tes or
carcter. Esto ermite aumentar los caracteres &asta A=000, ( as' se ueden reresentar los
caracteres que comonen las len*uas, vivas o muertas, ms imortantes del mundo.
-
7/25/2019 Cadenas en Java
5/8
Ba( que tener en cuenta que si nos salimos del ran*o 0== que coincide con el
c"di*oASCuede que las comaraciones no sean las eseradas.
)as funciones de comaraci"n son las si*uientes
boolean e+uals( bject o );:evuelve truesi se le asa una referencia a unobjeto Stringcon los mismos caracteres, ofalsesi no.
boolean e+ualsgnoreCase( String s );Comara cadenas i*norando las diferencias de
orto*raf'a ma(>sculas/min>sculas.
boolean regionatches( boolean b, int o, String s , int i, int n ); Comara arte de dos
cadenas, carcter a carcter.
boolean starts-ith( String s, int i) Comrueba si la cadenatiene el refijos desde i.
boolean ends-ith( String s );Comrueba si la cadena termina con el sufijo s.
int co/are0o( bject o );:evuelve un entero que es menor, i*ual o ma(or que cero
cuando la cadena sobre la que se le invoca es menor, i*ual o ma(or que la otra. !i elarmetro es un String, la comaraci"n es l6#ica.
int co/are0ognoraCase( String s );Comara le#ico*rficamente, i*norando las
diferencias de orto*raf'a ma(>sculas/min>sculas.
d.) Cadenas String derivadas
En Java se devuelven nuevas cadenas cada ve4 que se invoca a un m6todo que crea una cadenadiferente orque las cadenas Stringson de s"lo lectura
String re/lace( char oldChar, char ne#Char );:evuelve una nueva cadena con todos los
caracteres oldCharsustituidos or el carcter ne#Char.
String to1o#erCase();:evuelve una nueva cadena con los caracteres en min>sculas, o si
se esecifica armetro, si*uiendo sus re*las.
String to/erCase( 1ocale l );:evuelve una nueva cadena con los caracteres en
ma(>sculas, o si se esecifica armetro, si*uiendo sus re*las.
static String tri() :evuelve una nueva cadena del que se &a eliminado los esacios en
blanco or el rinciio ( or el final.
static String co/%2aluef( char[] v, int ini, int fin );:evuelve una cadena i*ual que la
contenida en el vector v, entre los l'mites ini(fin $si no se esecifican coia todo el
vector%.
-
7/25/2019 Cadenas en Java
6/8
static String concat( String s ) Concatena la cadena que recibe al final de 6sta.
e.) Conversiones entre cadenas String y tipos simples Java
8ara convertir una variable de un tio de datos simle $char, boolean, int, long, float, double)en
una cadena $String%, bastar con invocar al m6todo valuef() del objeto Stringcorresondiente
static String valuef( ti/o );El armetro ti/osoorta un carcter $char% un vector de
caracteres $char[]% o un objeto $bject%.
!in embar*o ara convertir el valor de una cadena en un tio de datos simle deberemos utili4ar
los si*uientes m6todos
Tipo De String
boolean ne# Boolean(String).boolean2alue()
int nteger.3arsent(String, int base)
long 1ong.3arse1ong(String, int base)
float ne# 4loat(String).float2alue()
double ne# 5ouble(String).double2alue()
0abla 678 Conversiones de cadenas a ti/os si/les
Do &a( nin*>n m6todo que convierta los caracteres escaados Java $ \b, \udddd % en variablescarcter $char),o a la inversa. )o que se uede &acer es invocar valuef() con un carcter $char%
ara obtener una cadena de la clase Stringque conten*a ese carcter.
7s' mismo no &a( formas de crear o decodificar cadenas de n>meros en formatos octal $ 7% o
&e#adecimal$7%.
f.) Conversiones entre cadenas String y vectores
-
7/25/2019 Cadenas en Java
7/8
-
7/25/2019 Cadenas en Java
8/8
void setCharAt( int i, char to );Cambia el carcter de la osici"n ior to. !i la osici"n
suera la lon*itud de la cadena, se e#tiende rellenndose con caracteres nulos.
StringBuffer re/lace( int ini, int fin, String s );Geemla4a una subcadena de esta cadena
$de iniafin% or la cadena recibida or armetro. Do se debe confundir con el
m6todo re/lace()que inclu(e la claseString.
StringBuffer reverse() 9nvierte la cadena $de i4quierda a derec&a%.
@ m6todos de borrado
StringBuffer delete( int ini, int fin );?orra la subcadena entre el carcter ini( elfin.
StringBuffer deleteCharAt( int i );?orra el carcter en la osici"n i.
c.) Capacidad de la cadena
El buffer de un objeto StringBuffertiene una ca/acidadque es la lon*itud de la cadena que
uede almacenar sin tener que asi*nar ms esacio. El buffer crece automticamente a medidaque se aHaden caracteres, ero resulta ms eficiente esecificar el tamaHo del buffer de una sola
ve4
int ca/acit%();:evuelve la caacidad actual del buffer.
void ensureCa/acit%( int i );. Iaranti4a que la caacidad del buffer es al menos i.
void set1ength( int i );Establece la lon*itud de esta cadena a i.
d.) !"traccin de datos
8ara obtener un objeto Stringa artir de un objeto StringBuffer, debe invocarse el
m6todo toString(), com>n a ambas clases.
!e debe tener en cuenta que no &a( m6todos StringBufferara eliminar una arte de un buffer.
8ara resolver este roblema, debe crearse un vector de caracteres a artir del buffer, ( construir
un nuevo buffer con el contenido restante. 8ara esto se usa el m6todogetChars(), com>n con laclase String.