Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação I Aulas 7 Prof. Jane Alvarez Professora : Jane2 Strings Java não possui um tipo primitivo string como em algumas outras linguagens (VB, Delphi). A biblioteca de classes do Java possui uma classe pré-definida chamada String, que está no pacote java.lang . Logo, em Java, strings não são tipos primitivos e sim objetos. A declaração de um objeto String segue o mesmo padrão de declaração das variáveis de tipos básicos: String mensagem; String nome = "Joao da Silva"; String saudacao = "Olá " + nome; String vazia = ""; Entretanto, por ser um objeto não precisaríamos do operador new e de um construtor ? A concatenação de strings é feita com o operador + Professora : Jane3 Strings Na realidade, por ser muito usado, o Java simplifica a chamada do construtor da classe String. Exemplo: String str = "abc"; é equivalente a: char[] data = { 'a', 'b', 'c' }; String str = new String(data); "abc" Professora : Jane4 Strings A classe String possui mais de 60 métodos para manipulação de strings. Alguns dos métodos mais usados são definidos a seguir: Professora : Jane5 Strings Método Descrição char charAt(int n) Retorna o caracter na n-ésima posição (começa a partir do ZERO) int compareTo(String outra) Compara a string com outra. Retorna –1, 0 ou 1 caso a string seja menor, igual ou maior que a outra, respectivamente boolean endsWith(String sufixo) Verifica se a string termina com o sufixo boolean equals(String outra) Compara a string com o objeto (case-sensitive) boolean equalsIgnoreCase(String outra) Compara a string com o objeto ignorando maiúsculas e minúsculas int indexOf(char ch) Retorna a primeira ocorrência de ch na string ou -1 se não existir int length() Retorna o tamanho da string em caracteres String replace(char velho, char novo) Substitui todas as ocorrências do caracter velho pelo novo Boolean startsWith(String prefixo) Verifica se a string inicia com o prefixo String substring(int inicio, int fim) Retorna a substring da posição inicio até fim-1 String toLowerCase() Retorna a string convertida para letras minúsculas String toUpperCase() Retorna a string convertida para letras maiúsculas String trim() Retira os espaços em branco no início e no fim da string Professora : Jane6 Strings String, em Java, são imutáveis. Isso significa dizer que, uma vez criadas, não podemos alterar o conteúdo de uma string. Quando usamos um método que "altera" a string, na realidade estamos gerando uma cópia alterada da string. Exemplo: String disciplina = "Linguagem de Programação II"; String maiuscula = disciplina.toUpperCase(); String inicio = disciplina.substring(0, 9); String outra = maiuscula.replace(' ', '-'); "Linguagem de Programação II" "LINGUAGEM DE PROGRAMAÇÃO II" "Linguagem" "LINGUAGEM-DE-PROGRAMAÇÃO-II" Professora : Jane7 Strings Outro exemplo: String disciplina = "Linguagem"; disciplina = disciplina + " de "; disciplina = disciplina + "Programação"; disciplina = disciplina + " II"; "Linguagem" Professora : Jane8 Strings Outro exemplo: String disciplina = "Linguagem"; disciplina = disciplina + " de "; disciplina = disciplina + "Programação"; disciplina = disciplina + " II"; "Linguagem" "Linguagem de" Professora : Jane9 Strings Outro exemplo: String disciplina = "Linguagem"; disciplina = disciplina + " de "; disciplina = disciplina + "Programação"; disciplina = disciplina + " II"; "Linguagem" "Linguagem de " "Linguagem de Programação" Professora : Jane10 Strings Outro exemplo: String disciplina = "Linguagem"; disciplina = disciplina + " de "; disciplina = disciplina + "Programação"; disciplina = disciplina + " II"; Ou seja, se alteramos com muita frequência uma string, temos uma perda de desempenho relacionada à cópia dessa string para um novo objeto. E quanto maior a string, pior o desempenho. Por isso, para programas que trabalham intensamente com strings existe a classe StringBuilder, que foge do escopo da nossa disciplina. "Linguagem" "Linguagem de " "Linguagem de Programação" "Linguagem de Programação II" O Java irá descartar automaticamente esses objetos quando necessário. Professora : Jane11 Strings Um detalhe muito importante da manipulação de strings é em relação à comparação de strings. Como strings são objetos, se usarmos os operadores relacionais (==, !=, >, <, >= ou <=) estaremos comparando as referências para as strings e não o conteúdo das strings. Para realizar a comparação do conteúdo devemos usar os métodos: equals() equalsIgnoreCase() compareTo() compareToIgnoreCase() Professora : Jane12 Strings Exemplo 1: Scanner t = new Scanner(System.in); String nome1 = t.nextLine(); String nome2 = t.nextLine(); String nome3 = nome1; if (nome1 == nome2) System.out.println("Igual"); else System.out.println("Diferente"); "Joao" "Joao" Quando comparamos nome1 == nome2 estamos comparando se a área de memória referenciada é a mesma e não se o conteúdo é o mesmo. Nesse caso vai imprimir "Diferente" nome1 nome3 nome2 nome1 == nome3 nome1 != nome2 Professora : Jane13 Strings Exemplo 2: Scanner t = new Scanner(System.in); String nome1 = t.nextLine(); String nome2 = t.nextLine(); String nome3 = nome1; if (nome1.equals(nome2)) System.out.println("Igual"); else System.out.println("Diferente"); Com o método equals() estamos comparando os conteúdos. Nesse caso vai imprimir "Igual" "Joao" "Joao" nome1 nome3 nome2 nome1 == nome3 nome1 != nome2 Professora : Jane14 Strings Exemplo 3: Scanner t = new Scanner(System.in); String nome1 = t.nextLine(); String nome2 = t.nextLine(); String nome3 = nome1; if (nome1.compareTo(nome2) == 0) System.out.println("Igual"); else System.out.println("Diferente"); O método compareTo() retorna: • um valor < 0 se nome1 < nome2 • um valor > 0 se nome1 > nome2 • um valor = 0 se nome1 = nome2 A comparação é feita usando a ordem do dicionário. "Joao" "Joao" nome1 nome3 nome2 nome1 == nome3 nome1 != nome2 Professora : Jane15 Strings Exemplos de resultados de s1.compareTo(s2): S1 S2 Resultado Descrição "a" "b" < 0 "a" < "b" "A" "a" < 0 "A" < "a" Letras maiúsculas vem ANTES de letras minúsculas "JOAO" "joao" < 0 "JOAO" < "joao" Letras maiúsculas vem ANTES de letras minúsculas "joao" "ana" > 0 "joao" > "ana" "joao" "Pedro" > 0 "joao" > "Pedro" P maiúsculo vem ANTES do j minúsculo "123" "joao" < 0 "123" < "joao" Dígitos vem ANTES de letras maiúsculas ou minúsculas "11" "2" < 0 "11" < "2" A comparação é feita como string e não como número Professora : Jane16 Strings Também é possível usar literais nas comparações de strings: Scanner t = new Scanner(System.in); String nome1 = t.nextLine(); String nome2 = t.nextLine(); String nome3 = nome1; if (nome1.compareTo("Jose") < 0) System.out.println(nome1 + " vem antes de Jose"); else if (nome1.compareTo("Jose") > 0) System.out.println(nome1 + " vem depois de Jose"); if (nome2.equalsIgnoreCase("JOAO")) System.out.println("Igual"); else System.out.println("Diferente"); Professora : Jane17 Exercício: Exercício 1 : Acrescente código ao Projeto TestaVetorEmpregado para trabalhar com letras maiúsculas. Para isso, use adequadamente, o método toUpperCase.
Compartilhar