Materiais, Manuais e Tutoriais>JAVA>Strings

Strings

Classes String e StringBuffer


As cadeias de caracteres em Java podem ser armazenadas em objetos da classe String e da classe
StringBuffer. As cadeias de caracteres devem estar entre aspas, enquanto que os caracteres devem estar
entre apóstrofos.
A classe String armazena cadeias de caracteres imutáveis, ou seja, não é permitido alterar o
conteúdo de um objeto da classe String.
A classe StringBuffer armazena cadeias de caracteres mutáveis, ou seja, em um objeto da classe
StringBuffer é possível acrescentar novos caracteres ou eliminar caracteres.


Exemplos:

String nome; A variável nome poderá armazenar uma cadeia de caracteres.
char letra; A variável letra poderá armazenar um único caractere.
StringBuffer texto;

A variável texto poderá armazenar uma cadeia de caracteres que, inicialmente,
tem tamanho 16, expansível de acordo com a necessidade.

 

A manipulação de cadeias de caracteres em Java utiliza o pacote de classes java.lang. Alguns
métodos das classes deste pacote são descritos a seguir. Este pacote de classes contém funcionalidades
básicas da linguagem Java e, por isso, dispensa o uso de import.


Inicializando Cadeias de Caracteres


As variáveis que armazenam cadeias de caracteres podem ser inicializadas automaticamente pelo
programa ou podem receber um valor por meio do teclado. A seguir exemplificamos alguns casos:


a) Inicialização no momento da declaração:
Observe a figura 1:

String texto1 = new String();
String texto2 = new String(“PROGRAMA”);
char texto[] = {‘c’,’o’,’m’,’p’,’u’,’t’,’a’,’d’,’o’,’r’};
String texto3 = new String(texto);
String texto4 = new String(texto, 7, 3);


Figura 1 – Exemplos de declarações de Strings


Na figura 1, o objeto texto1 foi instanciado e seu conteúdo será vazio. O objeto texto2 foi
instanciado e seu conteúdo será o conjunto de caracteres PROGRAMA. Um conjunto de caracteres é
sempre acompanhado por aspas.
Nesta mesma figura, a variável texto recebeu as letras separadamente (a variável texto é um vetor
de caracteres). Por isso, cada uma das letras estava acompanhada por apóstrofos – esta é a maneira de
identificar um caractere isoladamente. Em seguida, o objeto texto3 foi instanciado e seu conteúdo será o
conjunto de caracteres computador.
O objeto texto4 foi instanciado e seu conteúdo será o conjunto de caracteres da variável texto (o
vetor de caracteres), a partir da sétima posição e com três caracteres, ou seja, “dor”.


Na figura 2, o objeto texto5 foi instanciado, seu conteúdo é vazio e sua capacidade inicial é de 16
caracteres. O objeto texto6 foi instanciado, seu conteúdo é vazio e sua capacidade inicial é de 10
caracteres. O objeto texto7 foi instanciado e seu conteúdo é “valor”.


StringBuffer texto5 = new StringBuffer();
StringBuffer texto6 = new StringBuffer(10);
StringBuffer texto7 = new StringBuffer(“valor”);

Figura 2 – Exemplos de declarações de StringBuffers


b) Inicialização por meio da atribuição (depois da declaração)

Observe a figura 3:

String texto1 = new String();
texto1 = “aula”;
String texto2 = new String();
String texto3 = new String(“programa”);
texto2 = texto3;


Figura 3 – Exemplos de declarações de Strings


Na linha 02, o objeto texto1 recebe um valor constante, a cadeia de caracteres “aula”. Na linha 05
o objeto texto2 recebe o mesmo conteúdo de texto3, ou seja, “programa”.


c) Inicialização por meio do teclado

Observe a figura 4:

String cadeia = new String();
Scanner entrada;
entrada = new Scanner(System.in);
System.out.println(“Digite uma cadeia de caracteres”);
Cadeia = entrada.next();


Figura 4 – Exemplos de inicialização de String através do teclado


O método next consegue armazenar valores vindos do teclado. No caso de uma cadeia de
caracteres, esse método consegue armazenar todos os símbolos digitados até a ocorrência do primeiro
espaço em branco. Por exemplo, se for digitado o nome Maria da Silva, a variável cadeia armazenará
apenas Maria (o que vem depois do espaço em branco é perdido). Para resolver esse problema, utiliza-se o
método nextLine.

 

String cadeia = new String();
StringBuffer nome = new StringBuffer();
Scanner entrada;
entrada = new Scanner(System.in);
System.out.println(“Digite uma cadeia de caracteres”);
cadeia = entrada.nextLine();
nome.append(cadeia);


Figura 5 – Exemplos de inicialização de String através do teclado


Os objetos da classe StringBuffer não podem ser carregados pelo teclado com os métodos da
classe Scanner. Assim, o conteúdo do teclado deve ser carregado em um objeto da classe String pelo
método nextLine() e posteriormente atribuído a um objeto da classe StringBuffer.

Copiando Cadeias de Caracteres


Observe a figura 6. A variável str1, que é do tipo String, terá o mesmo conteúdo da variável
str2, que também é do tipo String.

String str1 = “telefone”;
String str2;
str1 = str2;


Figura 6 – Cópia de cadeias de caracteres


Também é possível copiar o conteúdo de uma string a partir de uma posição determinada. Observe
o exemplo da figura 7. O método substring (figura 7, linha 04) copia o conteúdo da variável str2, a
partir da posição inicial até o fim da cadeia, para a variável str1. Neste exemplo (figura 7), str1 conterá a
palavra “fone”.

 

String str1 = “telefone”;
String str2;
int pos_inicial = 4;
str1 = str2.substring(pos_inicial);


Figura 7 – Cópia de cadeias de caracteres


No exemplo da figura 8, o método substring copia o conteúdo da variável str2, a partir da
posição inicial até posição final – 1 da cadeia, para a variável str1. Neste exemplo, str1 conterá a
palavra “fo”.

String str1 = “telefone”;
String str2;
int pos_inicial = 4;
int pos_final = 6;
str1 = str2.substring(pos_inicial, pos_final);


Figura 8 – Cópia de cadeias de caracteres


O método append acrescenta o conteúdo da variável str2 ao final da variável str1, sendo que
str1 e str2 devem ser do tipo StringBuffer. Neste exemplo da figura 9, o objeto str1 conterá o texto
“telefone celular”.

 

StringBuffer str1 = “telefone”;
StringBuffer str2 = “ celular”;
str1.append(str2);


Figura 9 – Cópia de cadeias de caracteres

 

str1.append(str2, posição inicial, posição final);


O método append acrescenta o conteúdo da variável str2, a partir da posição inicial até a
posição final – 1, ao final da variável str1, sendo que str1 e str2 devem ser do tipo
StringBuffer.

StringBuffer str1 = “telefone do Sérgio”;
StringBuffer str2 = “celular”;
int pos_inicial = 9;
int pos_final = 10;
str1.append(str2, pos_inicial, pos_final);


Figura 10 – Cópia de cadeias de caracteres


Comparando Cadeias de Caracteres


Observe o exemplo abaixo (figura 11).

String texto1 = “Ana Claudia”;
String texto2 = “Ana Maria”;
if(texto1.equals(texto2)){
   System.out.println(“Nomes Iguais”);
}
else{
   System.out.println(“Nomes Diferentes”);
}


Figura 11 – Comparação de cadeias de caracteres


O método equals (figura 11, linha 03) compara duas cadeias de caracteres e retorna true se elas
forem iguais, ou false se forem diferentes. Esse método considera letras maiúsculas símbolos diferentes
de letras minúsculas. No exemplo da figura 11, o resultado da execução seria “Nomes Diferentes”.

No exemplo da figura 12, é feita uma comparação entre uma string totamente digitada em letras
maiúsculas e uma string totalmente digitada em letras minúsculas. As strings foram comparadas usando-se
o método equalsIgnoreCase (figura 12, linha 03). Este método compara duas cadeias de caracteres e
retorna true se elas forem iguais, ou false se forem diferentes. Esse método considera letras maiúsculas
e minúsculas símbolos iguais.

O resultado da execução do exemplo da figura 12 é “Nomes Iguais”.

 

String texto1 = “ANA CLAUDIA”;
String texto2 = “ana claudia”;
if(texto1.equalsIgnoreCase(texto2)){
   System.out.println(“Nomes Iguais”);
}
else{
   System.out.println(“Nomes Diferentes”);
}


Figura 12 – Comparação de cadeias de caracteres


As cadeias de caracteres também podem ser comparadas usando-se o método compareTo. Este método
compara duas cadeias de caracteres e retorna um número inteiro, que poderá ser:
· Zero se as duas cadeias forem iguais;
· Um número menor que zero se a cadeia1 for alfabeticamente menor que a cadeia2;
· Um número maior que zero se a cadeia1 for alfabeticamente maior que a cadeia2;


Esse método considera letras maiúsculas símbolos diferentes de letras minúsculas. A figura 13 apresenta
um exemplo de uso do método compareTo.

String texto1 = “ana claudia”;
String texto2 = “ana claudia”;
if(texto1.compareTo(texto2)==0){
   System.out.println(“Nomes Iguais”);
}
else{
   System.out.println(“Nomes Diferentes”);
}


Figura 13 – Comparação de cadeias de caracteres com o método compareTo


O resultado da execução do exemplo da figura 13 é “Nomes Iguais”.
Com o método startsWith, é possível comparar se uma cadeia de caracteres inicia com os
mesmos caracteres de outra cadeia.


Observe o exemplo da figura 14.

String texto1 = “ana claudia”;
if(texto1.startsWith(“ana”)){
   System.out.println(“Nomes Iguais”);
}
else{
   System.out.println(“Nomes Diferentes”);
}


Figura 14 – Comparação de cadeias de caracteres com o método startsWith

cadeia1.startsWith(cadeia2);
cadeia1.startsWith(cadeia2, posição);


O método startsWith compara se a cadeia1 começa com os mesmos caracteres da cadeia2.
Quando a posição é especificada, a comparação é iniciada a partir da especificação. Esse método
considera letras maiúsculas símbolos diferentes de letras minúsculas. Esse método retorna true ou false.
No exemplo da figura 14, está sendo testado se a string texto1 inicia com a cadeia de caracteres
“ana”. O resultado da execução é “Nomes Iguais”.

cadeia.endsWith(cadeia2);


O método endsWith compara se a cadeia1 termina com os mesmos caracteres da cadeia2.
Esse método considera letras maiúsculas símbolos diferentes de letras minúsculas. Esse método retorna
true ou false.


Descobrindo o número de caracteres de uma cadeia


O método length retorna para a variável tamanho o número de caracteres da cadeia.
tamanho = cadeia.length();

String texto1 = “mochila”;
int tam = texto1.length();
System.out.println(“Tamanho: “ + tam);


Figura 15 – Determinação do tamanho de uma String


O resultado da execução do programa da figura 15 é “Tamanho: 7”.
Verificando a posição de uma cadeia de caracteres dentro de outra cadeia de
caracteres


Observe o exemplo da figura 16.

String texto1 = “guarda-chuva”;
int pos1 = texto1.indexOf(“-”);
int pos2 = texto.lastIndexOf(“u”);


Figura 16 – Determinação da posição de uma substring em uma string

 

posi = cadeia1.indexOf(cadeia2);


O método indexOf (figura 16, linha 02) retorna a posição a partir da qual a cadeia2 aparece pela
primeira vez na cadeia1. A comparação começará da posição zero da cadeia1 até encontrar a primeira
ocorrência. Se a cadeia2 não existir na cadeia1, o retorno será -1.

No exemplo da figura 16, a variável pos1 recebe o valor 6.

posi = cadeia1.indexOf(cadeia2,posição);

O método indexOf retorna a posição a partir da qual a cadeia2 aparece pela primeira vez na
cadeia1. A comparação começará da posição especificada da cadeia1 até encontrar a primeira
ocorrência. Se a cadeia2 não existir na cadeia1, o retorno será -1.

posi=cadeia1.lastIndexOf(cadeia2);



O método lastIndexOf retorna a posição a partir da qual a cadeia2 aparece pela primeira vez
na cadeia1. A comparação começará do final da cadeia1 até encontrar a primeira ocorrência. Se a
cadeia2 não existir na cadeia1, o retorno será -1.

No exemplo da figura 16, a variável pos2 recebe o valor 9 (a posição do último caractere “u”).

posi=cadeia1.lastIndexOf(cadeia2,posição);


O método lastIndexOf retorna a posição a partir da qual a cadeia2 aparece pela primeira vez
na cadeia1. A comparação começará do final da cadeia1 até encontrar a primeira ocorrência. Se a
cadeia2 não existir na cadeia1, o retorno será -1.
Esses métodos fazem distinção entre letras maiúsculas e minúsculas. O método indexOf percorre
a cadeia do início para o fim e o método lastIndexOf percorre do fim para o início.

Apagando caracteres de uma cadeia de caracteres


Para apagar o conteúdo de uma cadeia de caracteres é necessário utilizar objetos da classe
StringBuffer, ou seja, objetos que armazenam cadeias de caracteres cujo tamanho de memória
ocupado pode variar de acordo com a necessidade.

cadeia.delete(posição inicial, posição final);

O método delete apaga os caracteres existentes da posição inicial até a posição final-1 da cadeia.

StringBuffer str1 = “telefone do Sérgio”;
str1.delete(0,4);


Figura 17 – Exclusão de caracteres


No exemplo, a substring “tele” é eliminada da StringBuffer str1.


Inserindo caracteres em uma cadeia de caracteres


Para inserir um conteúdo em uma cadeia de caracteres é necessário utilizar objetos da classse
StringBuffer, ou seja,objetos que armazenam cadeias de caracteres cujo tamanho de memória pode
variar de acordo com a necessidade.

cadeia1.insert(posição, cadeia2);

O método insert insere os caracteres existentes na cadeia2, na cadeia1, a partir da posição
especificada.

StringBuffer str1 = “telefone do Sérgio”;
StringBuffer str2 = “celular”;
str1.insert(8, str2);


Figura 18 – Inserção de caracteres


O exemplo da figura 18 insere a palavra “celular”após a palavra “telefone”.

 

Alterando os caracteres de uma cadeia de caracteres

 

Para alterar um conteúdo em uma cadeia de caracteres é necessário utilizar objetos da classe
String.

str1.replace(caractereAntigo, caractereNovo);
str1.replaceAll(caractereAntigo, caractereNov

o);
O método replace procura todas as ocorrências de caractereAntigo, dentro da cadeia str1,
substituindo-as por caractereNovo.
Não existe diferença entre os métodos replace e replaceAll.

String str1 = “telefone do Sérgio”;
char caractere = '@';
str1 = str1.replace('o', caractere);


Figura 19 – Substituindo caracteres

 

str1.replaceFirst(str2, str3);


O método replaceFirst procura a primeira ocorrência de str2, dentro da cadeia str1,
substituindo-as por str3.

str1.split(“separador”);


O método split separa o conteúdo da cadeia str1 em várias cadeias, utilizando o separador para
determinar onde começa e termina cada nova cadeia gerada.

str1.trim();


O método trim retira os espaços em branco do início e do fim da cadeia str1.

char novo[]=texto.toCharArray();


O método toCharArray coloca cada caractere da cadeia texto em uma posição de um vetor do
tipo char.

caractere = texto.charAt(posição);


O método charAt retorna para a variável caractere o caracter da posição especificada da cadeia
texto.

texto.setCharAt(posição, caractere);


O método setCharAt substitui o caractere da posição especificada da cadeia texto por
caractere.

texto.reverse();


O método reverse inverte os caracteres da cadeia texto..
Descobrindo um caractere a partir do seu valor ASCII

caractere = char(número);


O método char retorna, para a variável caractere, o caracter ASCII correspondente ao número.

Descobrindo o valor ASCII de um caractere

numero = int (caractere);


O método int, retorna para a variável numero, o valor numérico que representa o caractere da
tabela ASCII.

Descobrindo o caractere sucessor


Não existe um método específico para descobrir o caractere sucessor, mas somando uma unidade
ao caractere, obtém-se o seu sucessor.
Descobrindo o caractere antecessor
Não existe um método específico para descobrir o caractere antecessor, mas subtraindo uma
unidade ao caractere, obtém-se o seu antecessor.

Convertendo caracteres para maiúsculo


O método toUpperCase converte todos os caracteres da cadeia para maiúsculo.
cadeia.toUpperCase();

String texto

Compartilhe com seus amigos!



Teste de mesa | Tecnologia | Ciência | Informática