Java: A Classe String

Strings é uma sequência de caracteres. Estes podem ser letras, dígitos ou caracteres especiais, como + _ - * > .<
São tão importantes que o Java possui mais de uma classe só para tratar as strings.

Vejamos, por exemplo, construtores para a classe String:

char[] blog = {'p', 'r' , 'o' , 'g' , ' ' , 'p' , 'r' , 'o' , 'g' , 'r' , 'e' , 's' , 's' , 'i' , 'v' , 'a'};
String stg = new String( "teste" );
String stg1 = new String();
String stg2 = new String( stg );
String stg3 = new String( blog );
String stg4 = new String( blog, 5, 11 );

A saída seria:
stg → teste
stg1 →
stg2 → teste
stg3 → prog progressiva
stg4 → progressiva


Essa classe possui uma série de métodos para formatar strings. No último caso, 'stg4' é iniciada com parte da string 'blog', ela receberá 11 caracteres dessa string, a partir do caractere de índice 4.


Aqui vai uma importante ressalva: String objects são imutáveis! Não é possível mudar seus caracteres depois que você criou!

As strings, por serem da classe String, possuem métodos característicos:

  • stg.length() -> informa o tamanho da string
  • stg.charAt(indice) -> mostra determinado caractere da string
  • stg.getChars(int inicio, int fim, char[] , int inicio2)


Diferente de C/C++, por exemplo, String e Vetor de caracteres são duas coisas diferentes em Java.
No último método, queremos passar os caracteres da String 'stg', a partir do índice 'inicio' até o índice 'fim' para um vetor de caracteres, a partir da posição de índice 'inicio2' nesse vetor

stg.compareTo(stg2) -> 0 se forem iguais; negativo caso stg < stg2 ; positivo caso stg > stg2 , lexicograficamente falando (na forma do dicionário).


A classe String também oferece ferramentas para compararmos strings. Veja alguns desses métodos:

  • stg.equals(stg2) -> retorna 'true' ou 'false', com case sensitive (maiúsculo/minúsculo importam)
  • stg.equalsIgnoreCase -> retorna 'true' ou 'false', sem case sensitive (maiúsculo/minúsculo não      importam)
  • stg == "teste" -> retorna 'true' ou 'false' em relação ao fato de serem o mesmo OBJETO, não conteúdo!!! Só retorna 'true' se apontarem pro mesmo endereço de memória! 


Se tivéssemos feito:
stg="teste" , o método retornaria 'true', pois o Java trata todos os objetos de string literal de mesmo conteúdo como o mesmo objeto, só com mais de uma referência. Por exemplo:
string1="Programacao Progressiva"
string2="Programacao Progressiva"

Como ambas possuem o mesmo conteúdo, Java trata elas como o mesmo objeto. Ambas apontam pro mesmo endereço de memória.
Porém, com stg = new String("hello") , se cria um novo endereço de memória para a string. O que resultaria em 'false'.

  • stg.regionMatches(int a, String stg2, int b, int c) -> compara somente certas regiões das strings. Começa a partir do índice 'a' da 'stg', compara com a string 'stg2' a partir do índice 'b' desta, e elas comparam 'c' elementos das strings.


Também existem métodos para a busca, concatenação, alteração maiúsculo/minúsculo, substituição total/parcial e extração de trechos de texto ou caractere em strings, presentes na classe String.
Porém, devido ao grande número e flexibilidade dos métodos oferecidos pela classe String, é inviável mostrar todos aqui, deixamos alguns aqui e outros você pode ver na documentação, conforme sua necessidade. Exemplo:

  • stg.startsWith()
  • stg.endsWith()
  • stg.lastIndexOf()
  • stg.indexOf()
  • stg.substring()
  • stg.concat()
  • stg.replace()
  • stg.toUpperCase()
  • stg.toLowerCase()
  • stg.toCharArray()

Também existem métodos para 'quebrar' uma determinada string, cujos partes são separadas por um separador, como o espaço " ", por exemplo.
Escreva algo:
  • String stg= scanner.nextLine();
Receba as 'partes', separadas por espaço:
  • String[] pedacos = stg.split(" ");
  • pedacos.length -> retorna o numero de pedaços
Vamos imprimir esses pedaços, que nada mais são que as palavras que voce digitou:

for(String palavra : pedacos)
 System.out.println(palavra);