A Classe String no Java
- #Java
E aí, pessoal! Durante o bootcamp de Java do Banco PAN, o professor Gleyson nos incentiva a estudar a classe String por conta própria, então decidi compartilhar minhas anotações por aqui.
Criação de uma instância
String meuNome = "Gabriel";
Não é recomendável usar a atribuição new String("Gabriel"), pois o JVM já procura se existe uma string com este valor. Então usar o new possibilitaria a criação do mesmo texto em diferentes partes da memória.
Pode parecer não mudar muita coisa, mas dentro de um loop com diversas repetições, o new criaria o mesmo objeto diversas vezes.
Declarar uma string sem inicializá-la, cria um objeto de valor null. Ela precisa ser iniciada para ser utilizada, caso contrário ocorrerá um erro de compilação.
Concatenando Strings
A classe string possui dois métodos para concatenação. Sendo estes:
String string = "Olá";
string.concat(", Mundo");
string += "!";
Esses métodos são bons para deixar o código legível, mas eles têm um problema: a classe string é imutável, ou seja, a string não muda com as concatenações. Ao invés disso, um novo objeto é criado para cada mudança no texto.
Para resolver isso, existem as classes StringBuffer e StringBuilder
StringBuffer stringBuffer = "Olá";
stringBuffer.append(", Mundo!");
StringBuilder stringBuilder = "Olá";
stringBuilder.append(", Mundo!");
A StringBuffer é sincronizada, então é ideal quando a mesma string for usada em várias partes do código ao mesmo tempo. Caso contrário, a StringBuilder é recomendada, pois é levemente mais rápida.
A concatenação com a classe String ainda pode ser útil, caso deixe o código mais legível.
Como comparar Strings
Método equals
Este método verifica se as duas strings têm os mesmos caracteres e retorna um valor booleano.
String nome1 = "Gabriel";
String nome2 = "Gleyson";
String nome3 = "Gabriel";
nome1.equals(nome2); //aqui o valor será false
nome1.equals(nome3); //aqui o valor será true
Método compareTo
O método compareTo compara os valores Unicode de cada caractere nas strings.
Caso elas tenham o mesmo valor, o método retorna 0 (zero).
Caso a primeira string tenha um valor maior, o método retorna um número positivo.
Caso a segunda string tenha um valor maior, o método retorna um número negativo.
String nome1 = "Gabriel";
String nome2 = "Gabriel";
String nome3 = "Gabriela";
nome1.compareTo(nome2) //aqui o valor será 0
nome1.compareTo(nome3) //aqui o valor será negativo
nome3.compareTo(nome1) //aqui o valor será positivo
Métodos equalsIgnoreCase e compareToIgnoreCase
Estes são iguais aos anteriores, mas ignoram a diferença de maiúsculas e minúsculas.
Alguns outros métodos importantes
double numero = 42.42;
String.valueOf(numero);
/* retorna valor como um objeto String
(no exemplo, "42.42") */
String nome = "Gabriel";
nome.length;
/* retorna comprimento da String
(no exemplo, retorna o número 7) */
String nome = "Gabriel";
nome.startsWith("G");
/* verifica se string começa com letra(s) especificada(s)
e retorna valor booleano (no exemplo, true) */
String nome = "Gabriel";
nome.endsWith("A")
/* verifica se string começa com letra(s) especificada(s)
e retorna valor booleano (no exemplo, false) */
String letras = "abcdefghijklmnopqrstuvwxyz";
letras.indexOf("j", 2)
/* retorna posição da primeira aparição de um caractere
valor inteiro informa posição para começar a busca e é opcional
caso o método não encontre o caractere, ele retorna o valor -1
(no exemplo, retorna o número 9) */
String letras = "abcdefghijklmnopqrstuvwxyz";
letras.lastIndexOf("q", 2)
/* retorna posição da última aparição de um caractere
valor inteiro informa última posição da busca e é opcional
caso o método não encontre o caractere, ele retorna o valor -1
(no exemplo, retorna o número -1) */
String nome = "Gabriel";
nome.replace("el", "ela")
/* substitui trecho da string por outra expressão
(no exemplo, "Gabriela") */
String nome = "Gabriel":
nome.toUpperCase()
/* retorna todos os caracteres em letra maiúscula
(no exemplo, "GABRIEL")*/
String nome = "Gabriel";
nome.toLowerCase()
/* retorna todos os caracteres em letra minúscula
(no exemplo, "gabriel") */
Essa foi minha pesquisa, espero ter ajudado alguém! :)
Links de referência
1 https://www.devmedia.com.br/string-em-java-entendendo-e-utilizando-essa-classe/25503
2 https://www.devmedia.com.br/diferencas-entre-string-stringbuilder-e-stringbuffer-em-java/29865
3 https://blog.betrybe.com/java/java-string/
4 https://www.digitalocean.com/community/tutorials/string-vs-stringbuffer-vs-stringbuilder