LP_Aula04 String 1. Objetivos Demonstrar a utilização e manipulação com os métodos da classe String. 2. Strings 2.1. O que são Strings? Em Java, String é uma seqüência de caracteres utilizada para representação e manipulação de texto. Quando é necessário representar informações textuais em uma aplicação, seja ela para Desktop ou Web, como nome de pessoas, informações sobre endereço ou comentários em uma matéria no jornal, instâncias da classe String serão criadas invariavelmente. Isto é, sempre que precisarmos mostrar alguma informação em um sistema, dificilmente vamos conseguir isso sem o auxílio de Strings. Em uma visão mais técnica, String é uma classe presente no Java desde a versão 1.0 do JDK que implementa a interface CharSequence (além de Serializable e Comparable, mas essas duas não são interessantes para esta aula). Assim, podemos dizer que Strings nada mais são do que uma cadeia ordenada de caracteres. 2.2. Como utilizar Strings em Java A classe String permite a criação de suas instâncias de diversas maneiras. Ela possui vários construtores que recebem diversos tipos de parâmetros. Pelo fato de ser uma classe amplamente utilizada, ela também fornece um “atalho” para a criação de forma mais rápida de seus objetos, como pode ser observado no código abaixo. 1 package principal; 2 3 public class ClassePrincipal { 4 5 public static void main(String[] args) { 6 String minhaString1 = new String(); 7 minhaString1 = "Java"; 8 String minhaString2 = "Java"; 9 String minhaString3 = new String("Java"); 10 String minhaString4 = ""; 11 12 char[] meusChars = new char[] {J,a,v,a}; 13 String minhaString5 = new String(meusChars); 14 } 15 } Vamos à explicação dos pontos pertinentes: - Linha 6: A classe String, assim como qualquer classe em Java, pode ser instanciada com a utilização da palavra chave new. Neste caso, está sendo criado um objeto String vazio que é atribuído à variável de referência minhaString1; Linguagem de Programação Página 1 LP_Aula04 - Linha 7: A variável minhaString1 recebe o valor “Java”. Como a variável já foi declarada na linha anterior, neste momento acontece apenas a atribuição do conteúdo à variável; - Linha 8: Representa a maneira mais rápida e fácil de criar um novo objeto desta classe e atribuí-lo a uma variável (no caso, minhaString2); - Linha 9: Há diversos construtores na classe String. Esta linha demonstra a utilização de um deles: passar um objeto String no construtor de modo a criar um novo objeto String. Com relação à criação de objetos na memória, há uma diferença considerável no modo como as linhas 8 e 9 o fazem. Essa diferença será explicada mais adiante, na seção “Como são criados objetos da classe String”; - Linha 10: Aqui uma String vazia é criada utilizando-se o mesmo mecanismo de “atalho” que foi demonstrado na linha 8, só que o conteúdo para o qual aponta a variável minhaString4 é uma String vazia. Pode-se dizer que, com relação ao conteúdo, as linhas 6 e 10 fazem a mesma coisa: criam uma String vazia; - Linhas 12 e 13: Como já foi comentado neste artigo, a classe String possui diversos construtores. Não cabe aqui tentarmos demonstrar a utilização de cada um deles. Estas duas linhas demonstram mais um exemplo de como podemos criar objetos String a partir de outros objetos passados como parâmetro no construtor. A variável minhaString5 tem o mesmo conteúdo das variáveis minhaString1, minhaString2 e minhaString3, porém foi inicializada de uma maneira diferente das demais, recebendo um array de char. Estes são alguns modos de se declarar e atribuir valor às variáveis do tipo String. Agora veremos alguns dos métodos utilizados para se manipular o conteúdo destas variáveis. 3. Métodos úteis da classe String Para se trabalhar com texto, a classe String oferece diversos métodos utilitários. Por questões de espaço, não serão descritos todos aqui. Vamos apenas comentar aqueles que são mais utilizados no dia-a-dia do programador. Logicamente, dependendo do sistema que esteja sendo desenvolvido, alguns métodos serão mais utilizados que outros, mas independente do que seja necessário, a classe String oferece o suporte necessário para operações envolvendo texto: quebrá-lo em várias partes, fazer busca de determinado conteúdo, converter a String em bytes, verificar se o texto começa ou termina com um dado conjunto de caracteres, comparar se uma String é igual à outra (o método equals() é definido na classe Object), dentre outros. Linguagem de Programação Página 2 LP_Aula04 3.1. public replacement) String replace(CharSequence target, CharSequence O método replace() faz a substituição de um determinado conjunto de caracteres por outro, retornando uma nova String. Um exemplo de sua utilização pode ser visto em fóruns de discussão, onde os administradores criam uma lista de palavras de baixo calão que não podem ser publicadas. Caso alguém escreva tais palavras, elas serão automaticamente substituídas por outras, após uma busca adequada (que pode ser feita utilizando o método contains(), explicado mais adiante). Vejamos o código abaixo: 1 2 3 String s = "Este comentário foi péssimo!"; s = s.replace("péssimo","ruim"); System.out.println(s); A saída na linha 3 será “Este comentário foi ruim!”. O método replace() é Case Sensitive, ou seja, faz diferenciação entre maiúsculas e minúsculas. Portanto, se na linha 2 estivesse escrito s = s.replace(“Péssimo”,“ruim”) nada seria alterado e a frase inicial seria impressa na saída padrão. Também é válido lembrar que o método replace() busca todas as ocorrências do primeiro parâmetro e realiza a substituição pelo segundo. Perceba o que acontece com a busca na próxima sentença: 1 String s = "Gosto de comer frango com batata. Não gosto de batata frita."; 2 s = s.replace("batata","polenta"); 3 System.out.println(s); Aqui a impressão será “Gosto de comer frango com polenta. Não gosto de comer polenta frita.” Por fim, o método replace() é sobrecarregado e pode receber apenas um caractere (do tipo primitivo char) como parâmetro para que seja feita a substituição. Exemplo: 1 String s = "arara"; 2 s = s.replace(‘a´,´e´); // recebendo um char como parâmetro 3 System.out.println(s); A saída na linha 3 será “erere”. 3.2. public String trim() O método trim() retorna uma String sem os espaços em branco no começo e no final da mesma. É útil quando se trabalha com preenchimento de formulários. Antes de salvar no banco de dados as informações preenchidas pelo usuário na tela, pode-se chamar o método trim() em todos os campos texto preenchidos pelo operador, de modo a evitar que espaços em branco desnecessários sejam gravados, economizando espaço no banco de dados. O código abaixo exemplifica a utilização do método trim(): Linguagem de Programação Página 3 LP_Aula04 1 2 String s = " Java Magazine "; s = s.trim(); Após a execução do comando na linha 2, a variável de referência s apontará para a nova String criada sem os espaços que existiam na linha 1 (“Java Magazine”). Todavia, como pode ser observado, o espaço em branco do meio da palavra não foi removido. 3.3. public boolean contains(CharSequence s) O método contains() não tem como retorno uma nova String, mas sim um boolean. Ele avalia se a String original contém a String passada como parâmetro para o método. Este método pode ser utilizado para verificar, por exemplo, se determinado nome está na lista de aprovados de um concurso público ou vestibular. Ou ainda, se um dado específico foi recebido em uma mensagem enviada por outro sistema para realizar validação. As linhas abaixo demonstram uma utilização do método contains(): 1 2 String s = "001MARCOS PAULO M19803112"; System.out.println(s.contains("MARCOS")); Um detalhe interessante é que o método contains() também é Case Sensitive. No caso do código acima, o resultado será true, porém, se a String passada como parâmetro estivesse escrita “Marcos”, o resultado seria false. 3.4. public int length() O método lengh() retorna um int indicando o tamanho da String, ou seja, a quantidade de caracteres que há na String atual. É comum ser utilizado em loops for e blocos de condição if. O trecho a seguir demonstra a aplicação deste método: 1 System.out.println(" Java ".length()); A linha 1 imprimirá “6”, que é a quantidade de caracteres contida na String “Java” (aqui o método foi invocado diretamente na instância da classe, sem a utilização de uma variável de referência). Perceba que os espaços em branco também são considerados como caracteres. Se fizéssemos uma chamada ao método trim() encadeado com length(), da forma “Java”.trim().length(), a linha 1 exibiria o valor “4” na saída padrão. 3.5. public String toUpperCase() O método toUpperCase() retorna uma nova String com o mesmo conteúdo da original, só que com todos os caracteres em letras maiúsculas. Assim como o método trim(), toUpperCase() também pode ser utilizado antes de salvar dados de um formulário na base de dados. Como as pessoas não possuem o mesmo padrão de digitação (algumas digitam todo o texto em minúsculo, Outras Começam Todas As Palavras De Uma Frase Com Letras Maiúsculas, E HÁ TAMBÉM AQUELAS QUE ESQUECEM O CAPS LOCK LIGADO), o método toUpperCase() pode ser a solução Linguagem de Programação Página 4 LP_Aula04 para este problema, salvando todos os dados do cliente em letra maiúscula. Veja um exemplo abaixo: 1 2 3 4 5 6 String s1 = "rodolfo rodrigues"; String s2 = "Alfredo Augusto"; String s3 = "JONNY DEBRUCE"; System.out.println(s1.toUpperCase()); System.out.println(s2.toUpperCase()); System.out.println(s3.toUpperCase()); A saída será, respectivamente: RODOLFO RODRIGUES ALFREDO AUGUSTO JONNY DEBRUCE Existe ainda o método toLowerCase(), o “irmão menor” do método toUpperCase(), porém menos utilizado. Ele também retorna uma nova String com o mesmo conteúdo da original, mas com todos os caracteres em letras minúsculas. Se na linha 6 estivesse escrito System.out.println(s3.toLowerCase()) a saída seria “jonny debruce”. 3.5. public String substring(int beginIndex) O método substring() retorna uma parte do texto original a partir do índice especificado. Ele recebe como parâmetro um int que indica o ponto de partida (iniciado em zero) pelo qual se deve iniciar a pesquisa. A partir deste índice o método copia tudo que estiver até o final da palavra. Há outra implementação deste método que recebe um índice para indicar o término da pesquisa, mas ele não será abordado aqui. O método substring() pode ser útil para fazer buscas em Strings e capturar determinadas informações, por exemplo: 1 2 String s = "Universidade"; System.out.println(s.substring(7)); Como o índice da String inicia em zero, a saída do comando será “idade”. Note que o caractere que estiver ocupando a posição do índice inicial de pesquisa também será incluído na String de resultado. A Tabela 1 demonstra o funcionamento do método para a palavra “Universidade”. Tabela 1 - Caracteres da String “Universidade” copiados pelo método substring(). Os métodos apresentados aqui são apenas alguns dos muitos presentes na classe String. Porém, sabendo-se trabalhar com os que já foram citados é possível realizar muitas tarefas do cotidiano da programação em Java. A Tabela 2 apresenta uma descrição sucinta de outros métodos úteis presentes na classe String. Linguagem de Programação Página 5 LP_Aula04 Tabela 2 - Outros métodos úteis presentes na classe String Até o momento vimos o que fazer para criar Strings e também como manipular seu conteúdo, agora vamos analisar uma das particularidades das Strings: a imutabilidade. Linguagem de Programação Página 6