Este artículo presenta las 10 preguntas más comunes sobre String en Java:
1. Para comparar cadenas, ¿debería utilizar "==" o igual a()?
En pocas palabras, "==" determina si dos referencias se refieren a la misma dirección de memoria (el mismo objeto físico).
E igual determina si los valores de dos cadenas son iguales.
A menos que desee determinar si dos referencias de cadena son el mismo objeto, siempre debe utilizar el método equals().
Comprenderá mejor este problema si comprende las prácticas en cadenas.
2. Para información confidencial, ¿por qué es mejor usar char[] que String?
String es un objeto inmutable, lo que significa que una vez creado, el objeto completo no se puede cambiar. Incluso si un principiante piensa que la referencia de String ha cambiado, en realidad es solo la referencia (puntero) que apunta a otro objeto (nuevo).
Los programadores pueden modificar explícitamente la matriz de caracteres, por lo que la información confidencial (como las contraseñas) no se expone fácilmente en otros lugares (siempre que establezca char[] en 0 después de su uso).
3. ¿Utilizar cadena como condición de caso en la declaración de cambio?
A partir de JDK7, esto es posible. Por cierto, Java 6 y versiones anteriores no lo admiten.
Copie el código de código de la siguiente manera:
// ¡Solo válido en Java 7 y superior!
cambiar (str.toLowerCase()) {
caso "a":
valor = 1;
romper;
caso "b":
valor = 2;
romper;
}
4. Convertir cadena en número
Para números muy grandes, utilice Long, el código es el siguiente
Copie el código de código de la siguiente manera:
int edad = Integer.parseInt("10");
long id = Long.parseLong("190"); // Si el valor puede ser grande.
5. Cómo dividir una cadena por caracteres de espacio en blanco
La cadena recibida por el método split() de String se analizará como una expresión regular.
"/s" representa caracteres en blanco, como espacio " ", tabulación "/t", avance de línea "/n", retorno de carro "/r".
Cuando el compilador analiza el código fuente, también realizará una transcodificación literal, por lo que se necesita "//s".
Copie el código de código de la siguiente manera:
String[] strArray = aString.split("//s+");
6. ¿Cómo se procesa internamente el método substring()?
En JDK6, el método substring() todavía comparte la matriz char[] original y construye una cadena "nueva" a través del desplazamiento y la longitud.
Si desea que substring() obtenga un objeto recién creado, utilice el siguiente método:
Copie el código de código de la siguiente manera:
Cadena sub = str.substring(inicio, fin) + "";
Por supuesto, en Java 7, substring() crea una nueva matriz char[] en lugar de compartirla.
Para obtener más información, consulte: método substring() y sus diferencias en JDK6 y JDK7
7. Cadena frente a StringBuilder frente a StringBuffer
StringBuilder es mutable, por lo que los valores internos se pueden modificar después de la creación.
StringBuffer está sincronizado y, por lo tanto, es seguro para subprocesos, pero relativamente menos eficiente.
8. ¿Cómo empalmar la misma cuerda repetidamente?
Opción 1: utilizar la clase de utilidad StringUtils de la biblioteca Apache Commons Lang.
Copie el código de código de la siguiente manera:
Cadena cadena = "abcd";
Cadena repetida = StringUtils.repeat(str,3);//abcdabcdabcd
Opción 2:
Utilice el constructor StringBuilder. Más flexible.
Copie el código de código de la siguiente manera:
Cadena src = "nombre";
int len = src.length();
repetición interna = 5;
Constructor StringBuilder = nuevo StringBuilder(len * repetir);
for(int i=0; i<repetir; i++){
constructor.append(src);
}
Cadena dst = builder.toString();
9. ¿Cómo convertir una cadena en una fecha?
Copie el código de código de la siguiente manera:
Formato SimpleDateFormat = nuevo SimpleDateFormat("aaaa-MM-dd");
Cadena cadena = "2013-11-07";
Fecha fecha = format.parse(str);
System.out.println(formato.formato(fecha));//2013-11-07
10. ¿Cómo contar la cantidad de veces que aparece un determinado personaje?
También utilizando la clase StringUtils de la biblioteca Apache Commons Lang:
Copie el código de código de la siguiente manera:
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);