Antes de qualquer coisa, acompanhe esse vídeo. Em seguida, continue com a leitura do texto.
String nome = new String("Mr Henry");
...ou podemos atribuir-lhes valores literais...
String nome = "Mr Henry";
String diretor = new String("Von Trier");
int tam = diretor.length();
System.out.println("O String |"+diretor + "| tem "+tam+ " caracteres.");
(Saída: O String |Von Trier| tem 9 caracteres.)
String autor1 = new String("Voltaire");
String autor2 = new String("VoltaiRe");
boolean b1 = autor1.equals("Voltaire");
boolean b2 = autor1.equals(autor2);
boolean b3 = autor1.equalsIgnoreCase(autor2);
System.out.println(b1+" "+b2+" "+b3);
(Saída: true false true)
String banda1 = new String("Dream Theater");
String banda2 = new String("Pink Floyd");
String banda3 = new String("Sigur Ros");
int c1 = banda2.compareTo("Pink Floyd");
int c2 = banda2.compareTo(banda1);
int c3 = banda2.compareTo(banda3);
...c1 será igual a zero, pois o String sobre o qual invocamos o método compareTo (banda2) tem seu valor (Pink Floyd) exatamente igual ao String que passamos como parâmetro para este método (Pink Floyd)
...c2 será um número maior que zero, pois o String sobre o qual invocamos o método compareTo (banda2) tem seu valor (Pink Floyd) lexicograficamente MAIOR do que o conteúdo do String que passamos como parâmetro para o método (Dream Theater)
...c3 será um número menor que zero, pois o String sobre o qual invocamos o método compareTo (banda2) tem seu valor (Pink Floyd) lexicograficamente MENOR do que o conteúdo do String que passamos como parâmetro para o método (Sigur Ros)
String poeta1 = new String("Fernando Pessoa");
int indice1 = poeta1.indexOf("e");
System.out.println(indice);
(Saída: 1)
indice = poeta1.indexOf(7,"e");
System.out.println(indice);
(Saída: 10)
indice = poeta1.indexOf("ndo");
System.out.println(indice);
(Saída: 5)
indice = poeta1.indexOf("xy");
System.out.println(indice);
(Saída: -1)
String poeta2 = new String("Augusto dos Anjos");
int indice = poeta2.indexOf(" ");
int tam = poeta2.length();
String nome = poeta2.substring(0,indice);
String sobreNome = poeta2.substring(indice+1,tam);
System.out.println("Nome:"+nome);
System.out.println("Sobrenome:"+sobreNome);
(Saída:
Nome:Augusto
Sobrenome:dos Anjos
)
Primeiro o vídeo, depois o texto.
O pacote java.util oferece uma classe para efetuarmos leitura de Strings (e de todos os tipos básicos) a partir do teclado. Esta classe é Scanner.
Podemos criar objetos Scanner para ler do teclado com a seguinte linha:
Scanner teclado = new Scanner(System.in);
Entenderemos melhor esta linha em aulas posteriores. Por enquanto, vamos usá-la sem maiores explicações. Para que a criação do Scanner seja possível, precisamos importar a classe do pacote onde ela está localizada:
import java.util.Scanner;
Podemos, também, importar todas as classes do pacote java.util numa só linha:
import java.util.*;
Uma vez criado um objeto Scanner, podemos efetuar a leitura através de diversos métodos, de acordo com o que queremos ler.
Para ler um String...
String s = teclado.next();
Para ler um inteiro...
int num = teclado.nextInt();
Para ler um double...
double d = teclado.nextDouble();
Podemos facilmente usar a interface gráfica para leitura e escrita de Strings, através da classe JOptionPane.
Para usar essa classe, precisamos importá-la (ela pertence ao pacote javax.swing).
import javax.swing.JOptionPane;
Para usar o JOptionPane, não precisamos criar objetos (mais adiante, veremos por quê). Podemos invocar os métodos diretamente da própria classe:
String nome = JOptionPane.showInputDialog("Digite um nome");
O método chamado mostra a tela...
O método chamado desenha a tela e retorna o String digitado quando o usuário teclar OK.
Uma chamada posterior a...
JOptionPane.showMessageDialog(null, "Você digitou "+nome);
...terá como resultado:
Documentação Oficial da Classe String
Documentação Oficial da Classe Scanner
Documentação Oficial da Classe JOptionPane
Tutorial sobre Strings (site oficial da Sun, em inglês)
2.0 Crie uma classe no BlueJ para a resolução desses exercícios. A classe deve chamar-se ExerciciosTexto02. O objetivo de implementar essa classe será o de treinar um pouco sobre utilização de objetos Strings e tipos básicos, e você deverá criar um comportamento na classe (uma função ou método) para resolver cada um dos exercícios seguintes. Sua classe vai ficar, no fim, um grande balaio de gato, mas você terá treinado um pouco de programação (if's, for's etc.) junto com a utilização de objetos Strings e tipos básicos. Não faça entrada e saída na resolução desses exercícios (em outras palavras, não use Scanner, System.out.println() ou JOptionPane): todas as informações que o usuário precise fornecer para a resolução devem ser recebidas como parâmetro nos devidos métodos, assim como todas as informações que o usuário precisar ver após a resolução devem ser retornadas pelos devidos métodos. Veja o vídeo a seguir para a resolução deste primeiro exercício. Alguns outros exercícios estarão seguidos de vídeos com sua resolução, mas é importante que você tente resolver a sequência sem pular de vídeo em vídeo.
2.1 Considere as seguintes variáveis:
String nome1 = new String("abcdef");
String nome2 = "ghijklm";
int tam,comparacao;
int n1=5,n2=9;
Analise as atribuições a seguir. Caso uma atribuição seja válida, diga qual é o valor atribuído à variável que está à esquerda da atribuição. Caso uma atribuição não seja válida, explique o porquê. A resolução do exercício está no vídeo que
a. int tam = nome1.length;
b. comparacao = String.compareTo(nome1);
c. String copia = nome2.substring(3,nome2.length());
d. boolean b1 = nome1.equals("abcdeF");
e. boolena b2 = nome1.equalsIgnoreCase("GhijkLm");
f. String s1 = nome1 + nome2 + n1 + n2;
g. String s2 = nome1 + nome2 + (n1 + n2);
2.2 Receber dois inteiros e retorná-los em ordem crescente
2.3 Receber três números reais e retorná-los em ordem decrescente
2.4 Receber um número real e retornar sua raiz quadrada
2.5 Receber dois Strings e informar se o primeiro String está contido no segundo (use o método indexOf)
2.6 Receber dois Strings e retorná-los em ordem alfabética (use o método compareTo)
2.7 Receber três Strings e retorná-los em ordem alfabética (use o método compareTo)
2.8 Receber um array de Strings na forma "nome sobrenome" e retornar um array na forma "sobrenome, nome" (use os métodos indexOf e substring)
2.9 Receber um array de Strings e modificá-lo de forma que todos os seus itens fiquem com todas as letras maiúsculas (use o método toUpperCase)
2.10 Receber um array de Strings e retornar um array com os mesmos Strings mas com todas as letras maiúsculas (use o método toUpperCase)
2.11 Receber um vetor de inteiros. Percorrer o vetor com um comando for. A cada repetição, troque o elemento corrente com o que estiver uma posição à frente sempre que o elemento da frente for menor que o elemento corrente.
2.12 Adapte o exercício anterior de forma que as trocas sejam efetuadas e, além disso, o método retorne a quantidade de trocas realizadas.
2.13. Adapte o exercício anterior para que funcione com um vetor de Strings e faça as trocas sempre que um String for lexicograficamente maior que o String que está à sua frente no vetor. Lembre de retornar o número de trocas.
2.14 (Desafio) Receber um vetor de inteiros e modificá-lo para que fique em ordem decrescente. Dica de amigo: se você usar o método do exercício 2.12 e a quantidade de trocas retornada for 0 (zero), o vetor estará ordenado. É possível chamar um método de dentro de outro, assim como em qualquer linguagem de programação que você já estudou.
2.15 (Desafio) Receber um vetor de Strings e modificá-lo para que fique ordem alfabética. Dica de amigo: veja a dica de amigo da questão anterior.
2.16 (Desafio) Receber um vetor de Strings na forma "nome sobrenome" e modificá-lo para que fique ordenado alfabeticamente por sobrenome. Por exemplo: se o vetor {"robert plant", "ian gillan", "neil young"} for passado como parâmetro, após a execução do método, o conteúdo do vetor deve ser {"ian gillan", "robert plant", "neil young"}. Sem dicas, se vire sozinho.
2.17 (Desafio) Receber um vetor de Strings na forma "nome sobrenome" e modificá-lo para que fique ordenado alfabeticamente por sobrenome e com a forma dos strings alterada para "sobrenome, nome". Por exemplo: se o vetor {"robert plant", "ian gillan", "neil young"} for passado como parâmetro, após a execução do método, o conteúdo do vetor deve ser {"gillan, ian", "plant, robert", "young, neil"}