You are on page 1of 16

Java String es especial 1. Un breve resumen de la clase String Un Java Cadena contiene una secuencia inmutable de caracteres Unicode.

A diferencia de C / C + +, donde la cadena es simplemente un conjunto de carbn , A Java Cadena Es un objeto de la clase java.lang . Java Cadena Sin embargo, es especial. A diferencia de una clase ordinaria: Cadena se asocia con la cadena literal en forma de textos entre comillas dobles, como "Hola, mundo!". Usted puede asignar una cadena literal directamente en un Cadena variable, en lugar de llamar al constructor para crear un Cadena ejemplo. La '+' operador est sobrecargado para concatenar dos Cadena operandos. '+' no funciona en ningn otro objeto tal como Punto y Crculo . Cadena es inmutable. Es decir, su contenido no puede ser modificado una vez que se crea. Por ejemplo, el mtodo toUpperCase () construye y devuelve un nuevo Cadena en lugar de modificar el contenido de su ya existente. El mtodo comnmente utilizado en la Cadena clase se resumen a continuacin. Consulte la API de JDK para java.lang.String

un Listado completo. / / Longitud int length () / / Devuelve la longitud de la cadena estaVacia booleano () / / igual que thisString. longitud == 0 / / Comparacin boolean equals (String otro) / / No se puede usar '==' o '! =' para comparar dos cadenas en Java booleano equalsIgnoreCase (String otro) int compareTo (String otro) / / devuelve 0 si esta cadena es igual a otro; / / <0 si lexicogrfico menos que otro, o> 0 int compareToIgnoreCase (String otro) booleano startsWith (String otro) booleano startsWith (String otro, int fromIndex) / search / comienza en fromIndex booleano endsWith (String otro) / / Bsqueda e indexacin int indexOf (bsqueda String) int indexOf (bsqueda String, int fromIndex) int indexOf (int caracter) int indexOf (carcter int, int fromIndex) / / Bsqueda hacia adelante a partir de fromIndex int lastIndexOf (bsqueda String) int lastIndexOf (bsqueda String, int fromIndex) / search / hacia atrs a partir de fromIndex
Page 2

int lastIndexOf (carcter int) int lastIndexOf (carcter int, int fromIndex) / / Extraer un char o parte de la cadena (substring) charlas charAt (int index) / / ndice de 0 a longitud de cuerda - 1 Cadena substring (int fromIndex) Subcadena String (fromIndex int, int endIndex) / / excluir endIndex / / Crear un nuevo objeto String o char [] en el original (Las cadenas son inmutables!) Cadena toLowerCase () Cadena toUpperCase () Cadena trim () / / Crea una nueva cadena eliminando los espacios en blanco de la parte delantera y trasera Reemplazar cadena (char oldChar, char newChar) / / crea una nueva cadena con oldChar reemplazado por newChar Cadena concat (String otro) / / Igual que otro thisString + char [] ToCharArray () / / Crear un char [] de esta cadena GetChars void (int srcBegin, int srcEnd, char [] dst, int dstBegin) / / copia en dst char [] / / Los mtodos estticos para convertir a String primitivas Cuerda esttica valueOf (tipo arg) / / tipo puede ser primitivas o char [] / / Mtodo esttico como resultado una cadena con formato utilizando los especificadores de formato

formato static String (String formattingString, objetos ... args) / / igual que printf () / / Regular Expression (JDK 1.4) partidos booleanos (String regexe) Cadena replaceAll (String regexe, la sustitucin String) Cadena replaceAll (String regexe, la sustitucin String) String [] split (cadena regexe) / / Dividir la cadena utilizando regexe como delimitador, / / Devuelve una matriz de String String [SPLIT] (String regexe, int count) / / para el recuento de veces slo String.Format mtodo esttico () (JDK 1.5) La esttico mtodo String.Format () (Introducido en JDK 1,5) se puede utilizar para producir un formato Cadena el uso de Ccomo printf () 'S especificadores de formato. La format () mtodo tiene la misma forma como se printf () . Por ejemplo,
Pgina 3

String.Format ("% .1 f", 1.234); / / devuelve String "1.2" String.Format () Es til si usted necesita para producir un sencillo formato Cadena para algunos propsitos (por ejemplo, usado en mtodo toString () ). Por cadena compleja, utilice StringBuffer / StringBuilder con un Formateador . Si usted simplemente necesita enviar una cadena con formato simple de la consola, use System.out.printf () , Por ejemplo, System.out.printf ("% .1 f", 1.234); 2. La cadena es realmente especial Cuerdas recibir un tratamiento especial en Java, ya que se utilizan frecuentemente en un programa. Por lo tanto, la eficacia (en trminos de

clculo y almacenamiento) es crucial. Los diseadores de Java decidi mantener los tipos primitivos en un lenguaje orientado a objetos, en lugar de hacer todo lo un objeto, con el fin de mejorar el rendimiento de la lengua. Primitivas se almacenan en la pila de llamadas, que requieren menos espacios de almacenamiento y son ms baratos de manipular. Por otra parte, los objetos se almacenan en el montn programa, que requieren una gestin de memoria compleja y ms espacios de almacenamiento. Por motivos de rendimiento de Java Cadena est diseado para estar en entre una primitiva y una clase. Las caractersticas especiales de Cadena incluyen: La '+' operador, que realiza la adicin en primitivas (por ejemplo, int y doble ), Se sobrecarga para operar en Cadena objetos. '+' realiza concatenacin para dos Cadena operandos. Java no soporta la sobrecarga de operadores para el examen de ingeniera de software. En un lenguaje que soporta la sobrecarga de operadores como C + +, puede activar una '+' operador para realizar una resta, dio como resultado cdigos pobres. La '+' operador es el nico operador que est sobrecargado internamente para apoyar cadena concatenacin en Java. Tome en cuenta que '+' no funciona en cualquiera de los dos objetos arbitrarios, como Punto so Crculo s. La Cadena

puede ser construido por cualquiera de: 1. asignar directamente un literal de cadena a un Cadena referencia - al igual que un primitivo, o 2. a travs de la " nuevo "Operador y constructor, similar a otras clases. Sin embargo, esto no es comnmente utilizado y no se recomienda. Por ejemplo, Cadena str1 = "Java es caliente"; / / Implcito construccin a travs de cadena literal Cadena str2 = new String ("estoy bien"); construccin / / Explicit travs de nuevas En la primera declaracin, str1 se declara como una Cadena referencia y se inicializa con una cadena literal "Java es Caliente " . En la segunda declaracin, str2 se declara como una Cadena referencia y se inicializa a travs de la nuevo operador y constructor para contener "Estoy bien" . Cadena Los literales se almacenan en un fondo comn. Esto facilita la puesta en comn de almacenamiento de cadenas con el mismo contenido de conservar almacenamiento. Cadena objetos asignados a travs de nuevo operador se almacenan en la pila, y es all hay intercambio de almacenamiento para el mismo contenido. Literal de cadena 2,1 vs Objeto String
Page 4

Como se ha mencionado, hay dos formas de construir una cadena: la construccin implcita mediante la asignacin de una cadena literal o explcitamente la creacin de un Cadena

objeto a travs de la nuevo operador y constructor. Por ejemplo, Cadena s1 = "Hola"; / / Cadena literal String s2 = "Hola"; / / Cadena literal Cadena s3 = s1; / / Misma referencia Cadena s4 = new String ("Hola"); / / Cadena objeto Cadena s5 = new String ("Hola"); / / Cadena objeto Java ha proporcionado un mecanismo especial para mantener el Cadena - Los literales de cadena en una agrupacin llamada comn. Si dos literales de cadena tienen el mismo contenido, compartirn el mismo almacenamiento dentro de la piscina comn. Este enfoque es adoptadas para conservar almacenamiento para las cadenas de uso frecuente. Por otra parte, Cadena objetos creados a travs de la nuevo operador y constructor se mantienen en el montn. Cada Cadena objeto en el montn tiene su propio almacenamiento como cualquier otro objeto. No hay una puesta en comn de almacenamiento en montn, incluso si dos Cadena los objetos tienen el mismo contenido. Puede utilizar el mtodo equals () de los Cadena clase para comparar el contenido de dos Cadena s. Usted puede utilizar el operador de igualdad relacional '==' para comparar las referencias (o punteros) de dos objetos. Estudie los siguientes cdigos: s1 == s1; / / True, el puntero del mismo s1 s2 ==; Share / / true, s1 s1 y almacenamiento en piscina comn s1 s3 ==; / / True, s3 se asigna mismo puntero como s1 s1.equals (s3) / / true, los mismos contenidos s1 == s4; / / False, punteros diferentes s1.equals (s4) / / true, los mismos contenidos s4 s5 ==;

/ / Punteros falsos, diferentes en montn s4.equals (s5); / / true, los mismos contenidos Notas importantes: En el ejemplo anterior, he utilizado el operador de igualdad relacional '==' para comparar las referencias de dos Cadena objetos. Esto se hace para demostrar las diferencias entre el almacenamiento de intercambio de cadena de literales en el comn
Page 5

piscina y Cadena objetos creados en el montn. Se trata de un error lgico utilizar (Cadena1 == cadena2) en su programa de para comparar el contenido de dos Cadena s. Cadena Se pueden crear mediante la asignacin directa de un Cadena literal que se comparte en un fondo comn. Es poco comn y no se recomienda utilizar el nuevo operador construya una Cadena objeto en el montn. [TODO] Explicar el mtodo String.intern () . 2,2 String es inmutable Desde literales de cadena con la cuota de almacenamiento de contenido en el mismo fondo comn, Java Cadena est diseado para ser inmutable. Es decir, una vez Cadena se construye, su contenido no puede ser modificado. De lo contrario, el otro Cadena referencias que comparten la misma ubicacin de almacenamiento se ver afectado por el cambio, que puede ser impredecible y por lo tanto, no es deseable. Mtodos tales como toUpperCase () podra aparecer para modificar el contenido de un Cadena objeto. En

hecho, un nuevo completamente Cadena objeto se crea y se devuelve a la persona que llama. El original Cadena objeto ser cancela la asignacin, una vez que no hay ms referencias, y posteriormente basura recogida. Porque Cadena es inmutable, no es eficaz usar Cadena si tiene que modificar la cadena de frecuencia (que sera crear muchos nuevos Cadena s ocupando nuevas reas de almacenamiento). Por ejemplo, / / Cdigos ineficientes String str = "Hola"; for (int i = 1; i <1000; i + +) { str str = + i; } Si el contenido de un Cadena tienen que ser modificados con frecuencia, utilizar el StringBuffer o StringBuilder clase en su lugar. 3. StringBuffer y StringBuilder Como se explic anteriormente, Cadena s son inmutables porque Cadena literales con el mismo contenido comparten el mismo almacenamiento en el cadena comn de la piscina. Modificacin del contenido de un Cadena directamente puede causar efectos secundarios adversos a otro Cadena s compartir el mismo almacenamiento. JDK proporciona dos clases para apoyar mutables cadenas: StringBuffer y StringBuilder (En el paquete bsico java.lang ). La StringBuffer

o StringBuilder objeto es como cualquier objeto ordinario, que se almacenan en el montn y no compartido, y por lo tanto, puede ser modificada sin causar efecto secundario adverso a otros objetos. StringBuilder clase fue introducida en JDK 1.5. Es el mismo que StringBuffer clase, excepto que se StringBuilder es no sincronizado para operaciones multi-hilo. Sin embargo, para el programa de un solo hilo, StringBuilder , Sin sobrecarga de sincronizacin, es ms eficiente. 3,1 java.lang.StringBuffer Lea la especificacin API del JDK para java.lang.StringBuffer . / / Constructores StringBuffer () / / Un StringBuffer inicialmente vaca StringBuffer (int size) / / Con el tamao inicial especificado StringBuffer (String s) / / Con el contenido inicial especificado / / Longitud
Pgina 6

int length () / / Mtodos para incrementar el contenido StringBuffer append (tipo arg) / / tipo podra ser primitivas, char [], String, StringBuffer, etc StringBuffer insert (int offset, arg) / / Mtodos para manipular el contenido de StringBuffer delete (int inicio, int fin) DeleteCharAt StringBuffer (int index) setLength vaco (int newSize) setCharAt vaco (int index, char newChar) StringBuffer replace (int inicio, int fin, String s) Inversa StringBuffer () / / Mtodos para extraer todo / parte de los contenidos charlas charAt (int index) Cadena substring (int inicio) Subcadena String (int inicio, int fin) String toString () / / Mtodos para la bsqueda int indexOf (String SearchKey) int indexOf (String SearchKey, int fromIndex)

int lastIndexOf (String SearchKey) int lastIndexOf (String SearchKey, int fromIndex) Tome en cuenta que StringBuffer Es un objetivo comn. Es necesario utilizar un constructor para crear un StringBuffer (En lugar de asignar a un Cadena literal). Adems, '+' operador no se aplica a los objetos, incluyendo el StringBuffer . Es necesario utilizar un mtodo apropiado tal como append () o insert () para la manipulacin de un StringBuffer . Para crear una cadena de piezas, es ms eficaz utilizar StringBuffer (Multi-hilo) o StringBuilder (Un solo hilo) en lugar de a travs de Cadena concatenacin. Por ejemplo, / / Se crea una cadena de AAAA-MM-DD HH: MM: SS int year = 2010, mes = 10, da = 10; int hora = 10, = 10 minutos, segundos = 10; Cadena datestr = new StringBuilder ()
Page 7

.. Append (ao) append ("-").. Append (mes) append ("-").. Append (da) append ("") ..... Append (hora) y append (":") append (minutos) y append (":") append (segundo) toString ();. System.out.println (datestr); / / StringBuilder es ms eficiente que la concatenacin de cadenas Cadena anotherDataStr = ao + "-" + mes + "-" + dia + "" + hora + ":" + minutos + ":" + segundo; System.out.println (anotherDataStr); JDK compilador, de hecho, utiliza tanto Cadena y StringBuffer para manejar la concatenacin de cadenas a travs de la '+'

operador. Para ejemplos, Cadena msg = "a" + "b" + "c"; sern compilados en los siguientes cdigos para una mejor eficiencia: ... Cadena msg = new StringBuffer () append ("a") append ("b") append ("c") toString ().; Dos objetos se crean durante el proceso, un compuesto intermedio StringBuffer y el objeto devuelto Cadena objeto. Regla de oro: Cadena s son ms eficientes si no se modifican (porque son compartidos en la cadena piscina comn). Sin embargo, si tiene que modificar el contenido de una cadena con frecuencia (como un mensaje de estado), usted debe utilizar el StringBuffer clase (o la StringBuilder se describe a continuacin) en su lugar. 3,2 java.lang.StringBuilder (JDK 1.5) JDK 1.5 introdujo un nuevo StringBuilder clase (en el paquete java.lang ), Que es casi idntica a la StringBuffer clase, excepto que no est sincronizado. En otras palabras, si varios subprocesos tienen acceso a StringBuilder ejemplo en al mismo tiempo, su integridad no se puede garantizar. Sin embargo, para un programa de un solo hilo (el ms comn), haciendo de distancia con la sobrecarga de sincronizacin hace que el StringBuilder ms rpido. StringBuilder es API-compatible con el StringBuffer clase, es decir, que tiene el mismo conjunto de constructores y mtodos, pero sin ninguna garanta de sincronizacin. Puede ser un reemplazo drop-in para StringBuffer bajo un solo hilo ambiente. 3.3 Cadena de Benchmarking / StringBuffer / StringBuilder El siguiente programa compara los tiempos tomados para revertir una cadena larga a travs de un Cadena y un objeto

StringBuffer . 1 2 3 4 5 6 7 8 9 10 11 / / Invertir una cadena larga a travs de una cadena frente a un StringBuffer public class {StringsBenchMark public static void main (String [] args) { beginTime largo, elapsedTime; / / Crea una cadena larga Cadena str = ""; int size = 16536; char ch = 'a'; beginTime System.nanoTime = (); / / Referencia de tiempo en nanosegundos for (int cuenta = 0; contador <tamao, recuento + +) {
Page 8

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 str + = ch; ch + +; if (ch> 'z') { ch = 'a'; } } elapsedTime System.nanoTime = () - beginTime; System.out.println ("Tiempo transcurrido" + elapsedTime/1000 + "us (String Build)"); / / Invertir una cadena mediante la construccin de otra cadena carcter por carcter en el orden inverso Cadena StrReverse = ""; beginTime System.nanoTime = (); for (int pos = str.length () - 1; pos> = 0; pos -) { StrReverse + = str.charAt (pos); / / Concatenar } elapsedTime System.nanoTime = () - beginTime; System.out.println ("Tiempo transcurrido" + elapsedTime/1000 + "us (Usando String revertir) "); / / Invertir una cadena a travs de un StringBuffer vaco aadiendo caracteres en orden inverso beginTime System.nanoTime = (); StringBuffer sBufferReverse = new StringBuffer (tamao);

for (int pos = str.length () - 1; pos> = 0; pos -) { sBufferReverse.append (str.charAt (pos)); / / Anexar } elapsedTime System.nanoTime = () - beginTime; System.out.println ("Tiempo transcurrido" + elapsedTime/1000 + "us (Uso de StringBuffer para revertir) "); / / Invertir una cadena mediante la creacin de un StringBuffer con la cadena dada e invocar su reverse () beginTime System.nanoTime = (); StringBuffer sBufferReverseMethod = new StringBuffer (str); sBufferReverseMethod.reverse (); / / Utilizar mtodo reverse () elapsedTime System.nanoTime = () - beginTime; System.out.println ("Tiempo transcurrido" + elapsedTime/1000 + "us (Uso de StringBuffer reverse () method) "); / / Invertir una cadena a travs de un StringBuilder vaco aadiendo caracteres en orden inverso beginTime System.nanoTime = (); StringBuilder sBuilderReverse = new StringBuilder (tamao); for (int pos = str.length () - 1; pos> = 0; pos -) { sBuilderReverse.append (str.charAt (pos)); } elapsedTime System.nanoTime = () - beginTime; System.out.println ("Tiempo transcurrido" + elapsedTime/1000 + "us (Usando StringBuilder para
Pgina 9

58 59 60 61 62 revertir) "); / / Invertir una cadena mediante la creacin de un StringBuilder con la cadena dada e invocar su reverse () beginTime System.nanoTime = (); StringBuffer sBuilderReverseMethod = new StringBuffer (str); sBuilderReverseMethod.reverse (); elapsedTime System.nanoTime = () - beginTime; System.out.println ("Tiempo transcurrido" + elapsedTime/1000 + "us (Uso de StringBuidler reverse () method) "); } } El tiempo transcurrido es 332100 us (Build String) El tiempo transcurrido es 346639 us (Uso de cuerdas para invertir) El tiempo transcurrido es usec 2028 (Uso de StringBuffer para invertir) El tiempo transcurrido es 847 useg

(Utilizando el mtodo de la inversa StringBuffer ()) El tiempo transcurrido es 1092 usec (El uso StringBuilder para invertir) Tiempo transcurrido 836 useg (Utilizando el mtodo de StringBuidler reverse ()) Observar StringBuilder es de 2 veces ms rpido que StringBuffer , Y 300x ms rpido que Cadena . La reverse () mtodo es el ms rpido, que toma aproximadamente al mismo tiempo para StringBuilder y StringBuffer . 4. java.util.StringTokenizer Muy a menudo, usted necesita para romper una lnea de texto en tokens delimitados por espacios en blanco. La java.util.StringTokenizer clase admite esto. Por ejemplo, el siguiente programa invierte las palabras de una cadena. / / Invertir las palabras en una cadena utilizando StringTokenizer importar java.util.StringTokenizer; pblico StringTokenizerTest clase { public static void main (String [] args) { String str = "Lunes Martes Mircoles Jueves Viernes Sbado Domingo"; Cadena StrReverse; StringBuilder sb = new StringBuilder (); StringTokenizer st = new StringTokenizer (str); mientras que (st.hasMoreTokens ()) { sb.insert (0, st.nextToken ()); si (st.hasMoreTokens ()) {
Page 10

sb.insert (0, ""); } } StrReverse sb.toString = (); System.out.println (StrReverse); } } / / Constructores StringTokenizer (String s) / / Construye un StringTokenizer para la cadena dada, / / Usar el delimitador predeterminado conjunto de "\ t \ n \ r \ f"

/ / (Es decir, en la ficha en blanco, nueva lnea, retorno de carro y avance de pgina-). / / Los caracteres delimitadores mismos no sern tratados como fichas. StrintTokenizer (String s, String delimiterSet) / / Usar caracteres delimiterSet como delimitadores. / / Mtodos hasNextToken booleano () / / Devuelve true si muestra disponible siguiente Cadena nextToken () / / Devuelve el siguiente token / / Cdigo de ejemplo StringTokenizer tokenizer = new StringTokenizer (aString); mientras que (tokenizer.hasNextToken ()) { Cadena token = tokenizer.nextToken (); ..... } La documentacin JDK afirm que " StringTokenizer es una clase heredada que se mantiene por razones de compatibilidad aunque su uso no se recomienda en el nuevo cdigo. Se recomienda que cualquier persona que quiera utilizar la funcionalidad de este split () mtodo de Cadena o la java.util.regex paquete en su lugar. " Por ejemplo, el siguiente programa utiliza el mtodo split () de la clase String para revertir las palabras de una cadena. / / Invertir las palabras en una cadena con split () mtodo de la cadena s clas pblico StringSplitTest clase { public static void main (String [] args) { String str = "Lunes Martes Mircoles Jueves Viernes Sbado Domingo"; String [] tokens = str.split ("\ \ s"), el espacio / / blanco '\ s' como delimitador
Page 11

StringBuilder sb = new StringBuilder (); for (int i = 0; i <tokens.length, i + +) { sb.insert (0, fichas [i]); if (i <tokens.length - 1) { sb.insert (0, ""); } } Cadena StrReverse = sb.toString (); System.out.println (StrReverse); } }

You might also like