Uso de String em Java

1. Crie uma string:

(1) Maneiras comuns de construir String:

① Método 1: (Atribuição direta)

String str1 = "hello";

② Método dois: (método de construção)

String str2 = new String("hello");

③ Método três:

char[] value = {
    
    'a','b','c','d'};
String str3 = new String(value);

A diferença entre os três métodos:
Insira a descrição da imagem aqui
Entrevista: A diferença entre a instanciação dos dois objetos na classe String

1. Atribuição direta : Apenas um par de espaço de memória será aberto, e o objeto string pode ser salvo automaticamente no pool de objetos para o próximo uso.
2. Método de construção : dois espaços de memória heap serão abertos e não serão salvos automaticamente no pool de objetos. Você pode usar o método intern () para entrar manualmente no pool

(2) O conceito básico de String:

string é um tipo de referência , semelhante às
referências de ponteiro da linguagem C : apenas para a estrutura de dados de objetos
(podemos imaginar um rótulo de referência "anexado" a um objeto, um objeto pode ser anexado a uma ou mais tags ; Se um objeto não tiver um rótulo, será coletado como lixo pela JVM)

String str = "cool";
String str2 = "cool";

Insira a descrição da imagem aqui
Neste momento, alguém pode perguntar:
se str for modificado, str2 mudará de acordo?

String str = "cool";
String str2 = "cool";
str = "beautiful";
System.out.println(str2);

//执行结果:  cool

Insira a descrição da imagem aqui
Na verdade, um código como str = "beautiful" não modifica a string, mas faz a referência de str apontar para um novo objeto String. (O conteúdo da string é imutável)

2. A comparação de strings é igual:

(1) == tipo: o
tipo de dado básico compara o tamanho do valor

int x = 10 ;
int y = 10 ;
System.out.println(x == y); 
// 执行结果
true

Para String, se for uma atribuição direta, porque as duas referências apontam para o mesmo objeto no pool de constantes de string, ele retorna verdadeiro

String str1 = "Hello";
String str2 = "Hello"; 
System.out.println(str1 == str2); 
// 执行结果
true

Se for o método de construção, as duas referências apontam cada uma para dois objetos, porque novos dois objetos, então o resultado é falso

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2);
// 执行结果
false

Portanto, as comparações de string usando == não comparam o conteúdo da string, mas comparam duas referências que apontam para o mesmo objeto

(2) Em Java, se você quiser comparar o conteúdo de strings, deve usar o método equals fornecido pela classe String

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1.equals(str2));
// System.out.println(str2.equals(str1)); // 或者这样写也行
// 执行结果
true

3. Conversão de caracteres, bytes e strings

(1) Caracteres e strings

String pode ser convertida em char []
Insira a descrição da imagem aqui
Exemplo de código:

String str = "hello" ; 
System.out.println(str.charAt(0)); // 下标从 0 开始
// 执行结果
h

Conversão de string e array de caracteres

String str = "helloworld" ; 
// 将字符串变为字符数组
char[] data = str.toCharArray() ; 
for (int i = 0; i < data.length; i++) {
    
     
 System.out.print(data[i]+" "); 
} 
// 字符数组转为字符串
System.out.println(new String(data)); // 全部转换
System.out.println(new String(data,5,5)); // 部分转换

(2) Bytes e strings

Converter entre String e byte []
Insira a descrição da imagem aqui
Exemplo de código:

String str = "helloworld" ; 
// String 转 byte[] 
byte[] data = str.getBytes() ; 
for (int i = 0; i < data.length; i++) {
    
     
 System.out.print(data[i]+" "); 
} 
// byte[] 转 String 
System.out.println(new String(data));

Então, quando usar byte [] e quando usar char []?
byte [] : a string é processada byte a byte. Isso é adequado para uso em cenários de transmissão de rede e armazenamento de dados, e é mais adequado para operar em dados binários.
char [] : a string é processada caractere por caractere, o que é mais adequado para operar em dados de texto, especialmente quando contém chinês.

4. Operações comuns em strings:

(1) Comparação de strings:

Insira a descrição da imagem aqui

String str1 = "hello" ; 
String str2 = "Hello" ; 
System.out.println(str1.equals(str2)); // false 
System.out.println(str1.equalsIgnoreCase(str2)); // true
System.out.println("a".compareTo("A")); // 32

(2) Pesquisa de string:

Insira a descrição da imagem aqui
Exemplo de código:
string search, o melhor e mais conveniente é contains ()

String str = "helloworld" ; 
System.out.println(str.contains("world")); // true

Use o método indexOf () para pesquisa de localização

String str = "helloworld" ; 
System.out.println(str.indexOf("world")); // 5,w开始的索引
System.out.println(str.indexOf("cool")); // -1,没有查到
if (str.indexOf("hello") != -1) {
    
     
 System.out.println("可以查到指定字符串!"); 
}

Determine o início ou o fim:

String str = "**@@helloworld!!" ; 
System.out.println(str.startsWith("**")); // true 
System.out.println(str.startsWith("@@",2)); // ture 
System.out.println(str.endwith("!!")); // true

(3) Substituição da corda:

Insira a descrição da imagem aqui
Processamento de substituição de string:

String str = "helloworld" ; 
System.out.println(str.replaceAll("l", "_")); 
System.out.println(str.replaceFirst("l", "_"));

Observação:
como a string é um objeto imutável, a substituição não modifica a string atual, mas gera uma nova string

(4) Divisão de cordas:

Insira a descrição da imagem aqui
Realize o processamento de divisão de string:

String str = "hello world " ; 
String[] result = str.split(" ") ; // 按照空格拆分
for(String s: result) {
    
     
 System.out.println(s); 
}

Divisão parcial da corda:

String str = "hello world " ; 
String[] result = str.split(" ",2) ; 
for(String s: result) {
    
     
 System.out.println(s); 
}

Endereço IP dividido:

String str = "192.168.1.1" ; 
String[] result = str.split("\\.") ; 
for(String s: result) {
    
     
 System.out.println(s); 
}

Nota:

  1. Os caracteres "|", "*", "+" devem ser adicionados com caracteres de escape, precedidos de "\".
  2. E se for "", então deve ser escrito como "\ \".
  3. Se houver vários separadores em uma string, você pode usar "|" como um hífen.

Divida várias vezes:

String str = "name=zhangsan&age=18" ; 
String[] result = str.split("&") ; 
for (int i = 0; i < result.length; i++) {
    
     
 String[] temp = result[i].split("=") ; 
 System.out.println(temp[0]+" = "+temp[1]); 
}

(5) Interceptação de corda:

Insira a descrição da imagem aqui
Exemplo de código:

String str = "helloworld" ; 
System.out.println(str.substring(5)); 
System.out.println(str.substring(0,5));

Nota:

  1. Índice começa em 0
  2. Preste atenção à maneira de escrever o intervalo antes de fechar e abrir, substring (0, 5) significa o caractere que contém o subscrito 0, não o subscrito 5.

(6) Outras operações:

Insira a descrição da imagem aqui
Observe o uso do método trim ():

String str = " hello world " ; 
System.out.println("["+str+"]"); 
System.out.println("["+str.trim()+"]");

Observe o método isEmpty ():

System.out.println("hello".isEmpty()); 
System.out.println("".isEmpty()); 
System.out.println(new String().isEmpty());

Coloque a primeira letra em maiúscula:

public static void main(String[] args) {
    
     
 System.out.println(fistUpper("yuisama")); 
 System.out.println(fistUpper("")); 
 System.out.println(fistUpper("a")); 
 } 
 public static String fistUpper(String str) {
    
     
 if ("".equals(str)||str==null) {
    
     
 return str ; 
 } 
 if (str.length()>1) {
    
     
 return str.substring(0, 1).toUpperCase()+str.substring(1) ; 
 } 
 return str.toUpperCase() ; 
 }

5. A diferença entre String, StringBuffer e StringBuilder (entrevista)

(1) O conteúdo de String não pode ser modificado, enquanto o conteúdo de StringBuffer e StringBuilder pode ser modificado. Considere o uso de StingBuffer se a string é frequentemente modificada.
(2) String, StringBuilder adequado para StringBuffer de thread único
adequado para multithreading , security
(3) String, sua emenda subjacente é otimizada para StringBuilder

Acho que você gosta

Origin blog.csdn.net/qq_45658339/article/details/109106930
Recomendado
Clasificación