El procesamiento de cadenas es muy importante en muchos lenguajes de programación. Esto también se pregunta a menudo en las entrevistas. Si no tiene una comprensión firme, es fácil no responder.
Cadena de Java
En Java, String
es un tipo de referencia. Sin embargo, debido a que las cadenas se utilizan ampliamente en la programación de Java, el compilador de Java procesa las cadenas y puede utilizar directamente dos "
para representar las cadenas.
// 我们通常的做法
String s = "Hello World!";
// 下面这种写法也可以
String s = new String("Hello World!");
// 还可以这样写 String内部是通过一个char[]表示的
String s = new String(new char[] {
'H', 'e', 'l', 'l', 'o', '!'});
Una característica importante de las cadenas de Java es que las cadenas son inmutables (contenido).
- La variable de cadena declarada es mutable
- La cuerda en sí es inmutable.
String s1 = "Hello"; // 此时有一块内存存着"Hello", 且可通过s1访问它
s1 = "World"; // 此时有一块内存存着"Hello", 还有一块内存存着"World", 通过s1只能找到"World", "Hello"并未改变
Aquí puede echar un vistazo a un análisis de memoria de pila simple
Manipulación de cadenas de Java
Comparación de cadenas
Solo puede utilizar equals()
métodos ==
que no sean fiables.
p.ej
String s1 = "Hello";
String s2 = "Hello";
String s3 = "World";
String s4 = "wOrLd";
System.out.println(s1.equals(s2)); // true
System.out.println(s3.equals(s4)); // false
System.out.println(s3.equalsIgnoreCase(s4)); // true
Búsqueda de subcadenas o búsqueda
indexOf()
Busque la subcadena de izquierda a derecha y devuelva el subíndicelastIndexOf()
Busque la subcadena de derecha a izquierda y devuelva el subíndicecontains()
Determinar si incluir una determinada subcadenastartWith()
Determinar si comenzar con una determinada subcadenaendWith()
Determinar si terminar con una determinada subcadena
String s1 = "Are you ok ?";
System.out.println(s1.indexOf("o"));
System.out.println(s1.lastIndexOf('o'));
System.out.println(s1.contains("you"));
System.out.println(s1.startsWith("are"));
System.out.println(s1.endsWith(" ?"));
// 输出:
// 5
// 8
// true
// false
// true
Empalme de cuerdas
+
Empalme
Al generar, puede utilizar directamente +
la salida de empalme de cadenas y números.
String s1 = "Hello";
int n1 = 8848;
float f1 = 10.24f;
boolean b1 = false;
System.out.println(s1 + n1 + f1+ b1);
// 输出:
// Hello884810.24false
Usar +
empalme entre cuerdas
String s1 = "Hello";
String s2 = "World";
String s3 = s1 + ' ' + s2; // s3 = "Hello World"
- Método estático
join()
: use una cadena para concatenar una matriz de cadenas
String[] sArr = {
"Hello", "Hi", "Bye"};
String s = String.join("--", sArr); // 静态方法 所以是String.join()
System.out.println(s);
// 输出:
// Hello--Hi--Bye
Eliminar cadenas en blanco iniciales y finales
trim()
trim()
Retire la cabeza y la cola (Inglés),空格
,,\t
\r
\n
String s1 = " Hello \u3000"; // \u3000是中文空格Unicode编码(站长之家有转换工具 感兴趣的可以看看)
String s2 = "\t\nWorld \r ";
System.out.println(s1.trim());
System.out.println(s2.trim());
// 输出:
// `Hello `
// `World`
strip()
strip()
Incluyetrim()
funciones y también puede eliminar espacios similares a los espacios chinosstripLeading
Quite solo el espacio de la izquierdastripTrailing
Quite solo el espacio de la derecha
String s1 = " Hello \u3000";
String s2 = "\t\nWorld \r ";
System.out.println(s1.strip());
System.out.println(s2.strip());
// 输出:
// `Hello`
// `World`
Segmentación de cadenas
split
String s1 = "Are you ok ?";
String[] sArr = s1.split(" ");
System.out.println(Arrays.toString(sArr)); // 推荐这种打印方式 别用for
// 输出:
// [Are, you, ok, ?]
substring()
substring()
Su esencia es extraer subcadenas, que también se pueden considerar como una especie de segmentación.
String s1 = "Are you ok ?";
System.out.println(s1.substring(4)); // [4, s1.length()-1]
System.out.println(s1.substring(4, 7)); // [4, 7)
// 输出:
// you ok ?
// you
Reemplazo de subcadena
replace()
replace()
No cambie la cadena original, devolverá una nueva cadena
String s1 = "Are you ok ?";
String s2 = s1.replace("o", "ooo"); // 要么用另一个变量接收 要么直接打印 s1未改变
System.out.println(s2);
Salida formateada
format()
Método estático, preste atenciónString.format()
a
String s = "My name is %s, and I'm %d years olds.";
System.out.println(String.format(s, "XXX", 18));
// 输出:
// My name is XXX, and I'm 18 years olds.
Conversión de tipo
Convertir entre String y char []
String s1 = "Hello World!";
char[] sArr = s1.toCharArray();
String s2 = new String(sArr);
System.out.println(Arrays.toString(sArr));
System.out.println(s2);
// 输出:
// [H, e, l, l, o, , W, o, r, l, d, !]
// Hello World!
Conversión de cadenas y tipos de datos básicos
Aquí la conversión es relativamente simple, es necesario prestar atención, 静态方法
no pertenece a la instancia, debe 类
llamarse
String s1 = "123";
String s2 = "123.45f";
String s3 = "false";
float f = 80.86f;
System.out.println(Integer.parseInt(s1));
System.out.println(Float.parseFloat(s2));
System.out.println(Boolean.parseBoolean(s3));
System.out.println(String.valueOf(f));
// 输出:
// 123
// 123.45
// false
// 80.86