Cadenas en Java

download Cadenas en Java

of 8

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.