JavaSE - Explicação detalhada de métodos comuns da classe String (brincar com strings)

ced485cbb11e458d81a746890b32cf3f.gif

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

1. Construção comum de cordas

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)

3. Pesquisa de strings

char charAt(int index)

int indexOf(int ch)

int indexOf(int ch, int fromIndex)

int indexOf(String str)

int indexOf(String str, int fromIndex)

int lastIndexOf(int ch)

int lastIndexOf(int ch, int fromIndex)

int lastIndexOf(String str)

int lastIndexOf(String str, int fromIndex)

4. Conversão

1. Conversão numérica e de string

2. Conversão de caso

3. String para Array 

4. Formatação

5. Substituição de cordas

 1. Substitua todo o conteúdo especificado

2. Substitua o primeiro conteúdo

6. Divisão de strings

1. Divida todas as strings 

2. A string é dividida em grupos de limite no formato especificado

3. "." divisão

7. Interceptação de string

1. Interceptar do índice especificado até o final

2. Interceptar algum conteúdo

8. Corte de string()


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!

ced485cbb11e458d81a746890b32cf3f.gif

Acho que você gosta

Origin blog.csdn.net/chenchenchencl/article/details/126330055
Recomendado
Clasificación