Programação em Java – A Classe String – Introdução
Introdução à Classe String em Java
Usamos a classe String para representação de strings (cadeias de caracteres) em Java. Esta classe possui construtores que permitem inicializar objetos do tipo String de várias formas. O exemplo a seguir ilustra quatro delas:
char[] arrayCarac = {'B', 'o', 's', 'o', 'n', ' ', 'T', 'r', 'e', 'i', 'n', 'a', 'm', 'e', 'n', 't', 'o', 's'};
String txt = new String("Fábio dos Reis");
// Quatro formas de Construtores da classe String
String tex1 = new String();
String tex2 = new String(txt);
String tex3 = new String(arrayCarac);
String tex4 = new String(arrayCarac, 6, 5);
System.out.printf("tex1 = %s%ntex2 = %s%ntex3 = %s%ntex4 = %s%n", tex1, tex2, tex3, tex4);
- No primeiro exemplo chamamos o construtor sem passar nenhum argumento.
- No segundo exemplo, o construtor recebe um argumento, no caso uma string.
- O terceiro exemplo mostra o construtor recebendo um array de caracteres.
- O quarto exemplo mostra o construtor recebendo 5 caracteres a partir da posição 6 de um array de caracteres passado como primeiro argumento.
Métodos length, charAt e getChars
Esses métodos nos permitem obter o tamanho de uma string (seu comprimento), o caractere armazenado em uma posição específica ou ainda retornar um conjunto de caracteres de um objeto String na forma de um array de caracteres.
- Método length – Retorna o número de caracteres presentes em uma String.
- Método charAt – Retorna o caractere presente em uma posição específica da string. Este método recebe um número inteiro como argumento, e retorna o caractere que esteja armazenado na posição de índice equivalente a esse número. Lembre-se que contamos os elementos em uma String a partir da posição 0.
- método getChars – O método getChars recebe quatro argumentos: o primeiro é o valor de índice inicial a partir do qual caracteres serão copiados. O segundo é o valor de índice final + 1, indicando o último caractere a ser copiado. O array que receberá os caracteres é o terceiro argumento. Finalmente, o último argumento é o valor de índice (posição) no array a partir de onde os caracteres serão armazenados.
Vejamos exemplos da aplicação desses métodos em Java.
String string1 = "Bóson Treinamentos"; char[] arrayCar = new char[5]; System.out.printf("string1: %s", string1); // Comprimento da string: System.out.printf("%nComprimento da string1: %d caracteres", string1.length()); //Mostrar os caracteres da string1 em reverso com charAt System.out.printf("%nString1 de trás pra frente: "); for (int cont = string1.length() - 1; cont >= 0; cont--) { System.out.printf("%c ",string1.charAt(cont)); } // Criar um array de caracteres a partir da String: string1.getChars(0, 5, arrayCar, 0); System.out.printf("%nO array de caracteres criado é: "); for (char caractere : arrayCar) { System.out.print(caractere); }
Comparação de Strings em Java
É muito comum a necessidade de ter de comparar strings em uma aplicação. A classe String fornece métodos que permitem realizar comparações de diversas formas. A seguir, alguns dos métodos mais comuns de comparação de strings em Java:
- Método equals – O método equals verifica se dois objetos são iguais – mais precisamente, se eles são idênticos, retornando true caso sejam, e falso caso não sejam. A comparação é feita usando os valores inteiros Unicode de cada caractere dentro da String, o que chamamos de comparação lexicográfica. Note que isto significa que ele diferencia maiúsculas de minúsculas.
- Método equalsIgnoreCase – O método equals faz distinção de caso. Porém, se for necessário ignorar a diferença entre maiúsculas e minúsculas em uma comparação de Strings, devemos usar o método equalsIgnoreCase.
- Método compareTo – O método compareTo retorna um valor numérico dependendo do resultado da comparação. O valor 0 é retornado se as Strings forem iguais. Um número negativo é retornado se a String passada como argumento for maior que a String que invoca o método, e um número positivo é retornado se a string passada como argumento for menor que a String que o invoca. Este método também emprega comparação lexicográfica.
- Método regionMatches – Este método permite comparar partes de duas Strings. Ele emprega quatro ou cinco argumentos, como segue:
- O primeiro argumento é o índice inicial na String que chama o método.
- O segundo argumento é a String que será comparada.
- O terceiro argumento é é o índice inicial na String que será comparada.
- O quarto argumento é o número de caracteres que serão comparados.
- Opcionalmente, podemos adicionar um outro argumento inicial para forçar o método a ignorar o caso. Para isso, o argumento inicial deve ser o valor true.
- Método startsWith – Verifica se uma String inicia com uma sequência definida de caracteres. Passamos a sequência de caracteres a comparar como argumento. Podemos passar opcionalmente um segundo argumento numérico indicando em qual posição deve se iniciar a comparação dos caracteres.
- Método endsWith – Verifica se uma String termina com uma sequência definida de caracteres. Também passamos a sequência de caracteres a comparar como argumento para o método.
Vejamos alguns exemplos de comparação de string usando esses métodos.
String tex1 = new String("Bóson"); // O objeto tex1 é uma cópia dos caracteres "Bóson" String tex2 = "Méson"; String tex3 = "NÍVEL QUÂNTICO"; String tex4 = "Nível Quântico"; System.out.printf("tex1 = %s%ntex2 = %s%ntex3 = %s%ntex4 = %s%n%n", tex1, tex2, tex3, tex4); // Testar igualdade de strings if (tex1.equals("Bóson")) System.out.println("tex1 é igual à \"Bóson\""); else System.out.println("tex1 não é igual à \"Bóson\""); // Testar igualdade de strings, ignorando maiúsculas e minúsculas if (tex3.equalsIgnoreCase(tex4)) System.out.printf("%s é igual à %s se ignorarmos o caso%n", tex3, tex4); else System.out.println("tex3 não é igual a tex4"); // Testar usando método compareTo System.out.printf("%ntex1.compareTo(tex1) é %d", tex1.compareTo(tex1)); System.out.printf("%ntex1.compareTo(tex2) é %d", tex1.compareTo(tex2)); System.out.printf("%ntex2.compareTo(tex1) é %d", tex2.compareTo(tex1)); System.out.printf("%ntex3.compareTo(tex4) é %d", tex3.compareTo(tex4)); System.out.printf("%ntex4.compareTo(tex3) é %d%n%n", tex4.compareTo(tex3)); // Teste com método regionMatches (exemplo case sensitive) if (tex3.regionMatches(0, tex4, 0, 5)) System.out.println("Os primeiros 5 caracteres de tex3 e tex4 correspondem"); else System.out.println("Os primeiros 5 caracteres de tex3 e tex4 não correspondem"); // Teste com método regionMatches (exemplo ignorando caso) if (tex3.regionMatches(true, 0, tex4, 0, 5)) System.out.println("Os primeiros 5 caracteres de tex3 e tex4 correspondem, ignorando o caso"); else System.out.println("Os primeiros 5 caracteres de tex3 e tex4 não correspondem"); // Testar igualdade com o operador == if ( ) // retorna falso, pois não são o mesmo objeto System.out.println("tex1 é igual a \"Bóson\""); else System.out.println("tex1 não é igual a \"Bóson\"");
Perceba que não é correto usar o operador de comparação == para comparar dois objetos String.
Vejamos agora exemplos dos métodos startsWith e endsWith em Strings.
String meuTexto = new String("Bóson Treinamentos"); // Testar se a String inicia com Bó if (meuTexto.startsWith("Bó")) { System.out.println("A String inicia com Bó"); } // Testar se a String inicia com Bo (sem acento): if (meuTexto.startsWith("Bo")) { System.out.println("A String inicia com Bo"); } else { System.out.println("A String não inicia com Bo"); } // Testar se a String possui as letras son (a partir do 3º caractere): if (meuTexto.startsWith("son", 2)) { System.out.println("Sequência \"son\" está na posição indicada"); } else { System.out.println("Sequência \"son\" não está na posição indicada"); } // Testar se a String termina com a letra o: if (meuTexto.endsWith("o")) { System.out.println("A String termina com a letra o"); } else { System.out.println("A String não termina com a letra o"); }
Na próxima lição vamos mostrar mais métodos que podem ser aplicados na manipulação de Strings em Java.
Escreva um comentário