Autor: Rukawa Maple Knock Code
Página inicial do blog: Blog de Rukawa Kaede
Coluna: Aprenda java comigo
Citação: Fique com fome, fique tolo
Se você quer fazer coisas boas, primeiro precisa aprimorar suas ferramentas. Deixe-me apresentar a você uma ferramenta super poderosa para ganhar ofertas de grandes fabricantes - Niuke.com
Clique para se cadastrar gratuitamente e tire as dúvidas comigo
Diretório de artigos
2. Comparação de objetos String
1. == compara se se refere ao mesmo objeto
2. método booleano equals(Object anObject): comparar em ordem lexicográfica
3. Método int compareTo(String s): compare lexicograficamente
4. método int compareToIgnoreCase(String str)
int indexOf(int ch, int fromIndex)
int indexOf(String str, int fromIndex)
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str, int fromIndex)
1. Conversão numérica e de string
1. Substitua todo o conteúdo especificado
2. Substitua o primeiro conteúdo
2. A string é dividida em grupos de limite no formato especificado
1. Interceptar do índice especificado até o final
1. Construção comum de cordas
1. Use construção constante
2. Construa usando newString
3. Use a construção de matriz de caracteres
public class Test {
public static void main(String[] args) {
//1
String str1 = "hello";
System.out.println(str1);
//2
String str2 = new String("hello");
System.out.println(str2);
//3
char[] chars = {'h','e','l','l','o'};
System.out.println(chars);
}
}
Referência ao usar outros métodos: documentação oficial da string
Strings não podem ser herdadas , segue o código fonte da classe String
value é uma matriz do tipo char, a string é realmente armazenada na matriz do tipo char e não há /0 no final da string
Então String é um tipo de referência e não armazena a string em si internamente , veja um exemplo:
public class Test {
public static void main(String[] args) {
String str1 = new String("hello");
String str2 = new String("world");
String str3 = str1;
System.out.println(str3);
}
}
str1 e str2 referem-se a objetos diferentes str1 e str3 referem-se ao mesmo objeto
public class Test {
public static void main(String[] args) {
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
}
}
Como a classe String é um tipo de referência, mesmo que o conteúdo das strings seja o mesmo, eles não são iguais. Para comparar se são iguais, o método deve ser comparado chamando o objeto.
Em Java, "" também é um objeto da classe String.
public class Test {
public static void main(String[] args) {
System.out.println("hello".toString());
}
}
Você pode chamar métodos como toString()
2. Comparação de objetos String
1. == compara se se refere ao mesmo objeto
Para variáveis do tipo primitivo, a comparação é se o valor armazenado nas duas variáveis é o mesmo
Para variáveis de tipo de referência, a comparação é se as duas variáveis de referência se referem ao mesmo objeto
como acima mencionado
2. método booleano equals(Object anObject): comparar em ordem lexicográfica
ordem lexicográfica: a ordem dos tamanhos dos caracteres
A classe String substitui o método equals na classe pai Object, e os equals em Object são comparados por == por padrão.
A lógica de comparação após a reescrita:
public boolean equals(Object anObject) {
//1. 先检测this和anObject是否为同一个对象比较,如果是返回true
if (this == anObject) {
return true;
}
//2. 检测anObject是否为String类型的对象,如果是继续比较,否则返回false
if (anObject instanceof String) {
//向下转型
String anotherString = (String)anObject;
int n = value.length;
//3. this和anObject两个字符串的长度是否相同,是继续比较,否则返回false
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
//4. 按照字典序,从前往后逐个字符进行比较
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
3. Método int compareTo(String s): compare lexicograficamente
equals retorna um tipo booleano, enquanto compareTo retorna um tipo int
Como comparar:
1. Primeiro compare o tamanho de acordo com a ordem do dicionário, se houver caracteres desiguais, retorne diretamente a diferença de tamanho entre os dois caracteres
2. Se os primeiros k caracteres forem iguais (k é o comprimento mínimo de dois caracteres), o valor de retorno será a diferença entre os comprimentos das duas strings
Veja um exemplo:
public class Test {
public static void main(String[] args) {
String str1 = new String("hello");
String str2 = new String("hello");
int ret = str1.compareTo(str2);
if(ret>0){
System.out.println("str1>str2");
} else if (ret==0) {
System.out.println("str1=str2");
}
else {
System.out.println("str1<str2");
}
}
}
Código fonte:
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
4. método int compareToIgnoreCase(String str)
O mesmo que compareTo, mas ignore a comparação de maiúsculas e minúsculas
public class Test {
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("ac");
String s3 = new String("ABc");
String s4 = new String("abcdef");
System.out.println(s1.compareToIgnoreCase(s2)); //不同输出字符差值-1
System.out.println(s1.compareToIgnoreCase(s3)); //相同输出0
System.out.println(s1.compareToIgnoreCase(s4)); //前k个字符完全相同,输出长度差值-3
}
}
3. Pesquisa de strings
Métodos de pesquisa comuns fornecidos pela classe String:
char charAt(int index)
Retorna o caractere na posição do índice. Se o índice for negativo ou fora dos limites, uma IndexOutOfBoundsException será lançada
public class Test {
public static void main(String[] args) {
String s1 = new String("abcdef");
for (int i= 0; i< s1.length(); i++) {
System.out.println(s1.charAt(i));
}
}
}
int indexOf(int ch)
Retorna a posição da primeira ocorrência de ch, não retorna -1
public class Test {
public static void main(String[] args) {
String s1 = new String("abcdef");
System.out.println(s1.indexOf('c'));
}
}
int indexOf(int ch, int fromIndex)
Comece a partir da posição fromIndex para encontrar a posição em que ch aparece pela primeira vez e não retorna -1
public class Test {
public static void main(String[] args) {
String s1 = new String("abcdecf");
System.out.println(s1.indexOf('c',3));
}
}
int indexOf(String str)
Retorna a posição da primeira ocorrência de str, não retorna -1
public class Test {
public static void main(String[] args) {
String s1 = new String("abcdecf");
System.out.println(s1.indexOf("cde"));
}
}
int indexOf(String str, int fromIndex)
Comece a partir da posição fromIndex para encontrar a posição em que str aparece pela primeira vez, sem retornar -1
public class Test {
public static void main(String[] args) {
String s1 = new String("abcdecf");
System.out.println(s1.indexOf("cde",3));
}
}
int lastIndexOf(int ch)
Pesquise de trás para frente, retorne a posição onde ch aparece pela primeira vez e não retorne -1
public class Test {
public static void main(String[] args) {
String s1 = new String("abcdecf");
System.out.println(s1.lastIndexOf("c"));
}
}
int lastIndexOf(int ch, int fromIndex)
Partindo da posição fromIndex, procurando a posição onde ch aparece pela primeira vez de trás para frente, não retorna -1
public class Test {
public static void main(String[] args) {
String s1 = new String("abcdecf");
System.out.println(s1.lastIndexOf("c",4));
}
}
int lastIndexOf(String str)
Pesquise de trás para frente, retorne a posição da primeira ocorrência de str, não retorne -1
public class Test {
public static void main(String[] args) {
String s1 = new String("abcdecf");
System.out.println(s1.lastIndexOf("abc"));
}
}
int lastIndexOf(String str, int fromIndex)
Comece a partir da posição fromIndex, procure a posição em que str aparece pela primeira vez de trás para a frente e não retorna -1
public class Test {
public static void main(String[] args) {
String s1 = new String("abcdecf");
System.out.println(s1.lastIndexOf("abc",4));
}
}
4. Conversão
1. Conversão numérica e de string
public class Test {
public static void main(String[] args) {
String s1 = String.valueOf(123);
System.out.println(s1);
}
}
Você pode ver que existem muitos métodos sobrecarregados para usarmos, que podem converter muitos tipos diferentes de valores em strings
2. Conversão de caso
toUpperCase()
toLowerCase()
public class Test {
public static void main(String[] args) {
String s1 = "hellO嗨";
String ret = s1.toUpperCase();
System.out.println(ret);
}
}
toUpperCase() só converterá letras minúsculas para maiúsculas, nada mais mudará, assim como toLowerCase()
3. String para Array
toCharArray()
public class Test {
public static void main(String[] args) {
String str1 = "abcdef";
char[] chars = str1.toCharArray();
System.out.println(Arrays.toString(chars));
}
}
array para string
public class Test {
public static void main(String[] args) {
char[] chars = {'h','e','l','l','o'};
String s1 = new String(chars);
System.out.println(s1);
}
}
4. Formatação
String.format()
public class Test {
public static void main(String[] args) {
String s = String.format("%d-%d-%d",2022,8,14);
System.out.println(s);
}
}
5. Substituição de cordas
Nota: Como as strings são objetos imutáveis, a substituição não modifica a string atual, mas produz uma nova string
Use uma string para substituir os dados de string existentes, método:
1.String replaceAll(String regex, substituição de string)
2.String replaceFirst(String regex, substituição de string)
1. Substitua todo o conteúdo especificado
public class Test {
public static void main(String[] args) {
String s = "abcadeafagf";
String ret = s.replaceAll("a","c");
System.out.println(s);
System.out.println(ret);
}
}
Pode-se ver que a string original permanece inalterada após a string de substituição, e uma nova string é necessária para receber após a substituição.
2. Substitua o primeiro conteúdo
public class Test {
public static void main(String[] args) {
String s = "abcadeafagf";
String ret = s.replaceFirst("a","c");
System.out.println(s);
System.out.println(ret);
}
}
6. Divisão de strings
Divida uma string completa em várias substrings de acordo com o delimitador especificado
String[] split(String regex)
String[] split(String regex, limite int)
1. Divida todas as strings
public class Test {
public static void main(String[] args) {
String s = "hello world hello";
String[] ret = s.split(" ");
System.out.println(s);
System.out.println(Arrays.toString(ret));
}
}
2. A string é dividida em grupos de limite no formato especificado
public class Test {
public static void main(String[] args) {
String s = "hello world hello";
String[] ret = s.split(" ",2);
System.out.println(s);
System.out.println(Arrays.toString(ret));
}
}
3. "." divisão
public class Test {
public static void main(String[] args) {
String s = "hello.world.hello";
String[] ret = s.split(".");
System.out.println(s);
System.out.println(Arrays.toString(ret));
}
}
Normal use split(".") para dividir, descobrimos que a matriz de impressão está vazia, indicando que a divisão não foi bem-sucedida
Razão: "." precisa ser escapado, depois de adicionar "\\.", pode ser dividido
public class Test {
public static void main(String[] args) {
String s = "hello.world.hello";
String[] ret = s.split("\\.");
System.out.println(s);
System.out.println(Arrays.toString(ret));
}
}
Resumir:
1. Os caracteres "|", "*", "+" devem ser escapados, precedidos por "\\"
2. Se for "\", deve ser escrito como "\\\\"
3. Se houver vários separadores em uma string, você pode usar "|" como um hífen, ou seja, s.split("=|&"); é dividir a string s por = e &
7. Interceptação de string
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)
1. Interceptar do índice especificado até o final
public class Test {
public static void main(String[] args) {
String s = "hello world";
String ret = s.substring(5);
System.out.println(s);
System.out.println(ret);
}
}
2. Interceptar algum conteúdo
public class Test {
public static void main(String[] args) {
String s = "hello world";
String ret = s.substring(0,5);
System.out.println(s);
System.out.println(ret);
}
}
Resumir:
1. O índice começa em 0
2. Preste atenção ao método de escrita do intervalo de abertura e fechamento frontal, substring(0, 5) significa o caractere com subscrito 0, excluindo o subscrito 5
8. Corte de string()
Função: remova os espaços esquerdo e direito na string, mantenha os espaços do meio
public class Test {
public static void main(String[] args) {
String s = " hello world ";
String ret = s.trim();
System.out.println(s);
System.out.println(ret);
}
}
Resumir:
Percebemos que a maioria dos métodos da classe String não manipulam diretamente a string original, mas retornam uma nova string
"O compartilhamento desta edição está aqui, lembre-se de dar um link de três ao blogueiro, seu apoio é a maior força motriz para minha criação!