Boa tarde Srs. Mais uma vez venho pedir a orientação de vocês. No programa abaixo tenho de digitar uma frase e o método set deve excluir as palavras duplicadas mas não estou conseguindo fazer com que seja excluida. Será que é na hora de converter a string para array ? é nesse momento que estou me enrolando.
Antecipadamente agradeço.
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Exercicio3
{
Scanner input = new Scanner(System.in);
List< String > list;
public void executa()
{
System.out.println("Digite uma frase: ");
String frase = input.nextLine();
list = Arrays.asList( frase );
System.out.printf("Frase: %s\n", list );
naoDuplicadas( list );
}
private void naoDuplicadas( Collection< String > collection )
{
//cria um HashSet
Set< String > set = new HashSet< String >( collection );
System.out.println("\nNão duplicadas são: ");
for( String s : set )
System.out.printf("%s ", s );
System.out.println();
}
public static void main(String[] args)
{
Exercicio3 entrada = new Exercicio3();
entrada.executa();
}
}
Desculpe se estou falando besteira. Mas o Set não é para excluir as palavras duplicadas e o TreeSet as ordena ? O que não sei se estou fazendo direito é a transformação de String para array de String.
Abs,
[quote=Paulo Mour?]Desculpe se estou falando besteira. Mas o Set não é para excluir as palavras duplicadas e o TreeSet as ordena ? O que não sei se estou fazendo direito é a transformação de String para array de String.
Abs,[/quote]
Sim, a realidade é que o Treeset é uma implementação da interface Set, com suas peculiaridades, é claro.
Se eu fizer isso:
String frase = "Joao Carlos da Costa";
List<String> list = Arrays.asList(frase);
for (String valor : list) {
System.out.println("Item: " + valor);
}
Ele simplesmente imprimi a própria String.
Talvez seja isso que você queira:
String frase = "Joao Carlos da Costa";
char[] array = frase.toCharArray();
Se quer uma lista de palavras (frases), é só instanciar um List e ir adicionando as frases que desejar.
[quote=Paulo Mour?]Boa tarde Srs. Mais uma vez venho pedir a orientação de vocês. No programa abaixo tenho de digitar uma frase e o método set deve excluir as palavras duplicadas mas não estou conseguindo fazer com que seja excluida. Será que é na hora de converter a string para array ? é nesse momento que estou me enrolando.
Antecipadamente agradeço.
public class Exercicio3
{
Scanner input = new Scanner(System.in);
List< String > list;
public void executa()
{
System.out.println("Digite uma frase: ");
String frase = input.nextLine();
list = Arrays.asList( frase );
System.out.printf("Frase: %s\n", list );
naoDuplicadas( list );
}
private void naoDuplicadas( Collection< String > collection )
{
//cria um HashSet
Set< String > set = new HashSet< String >( collection );
System.out.println("\nNão duplicadas são: ");
for( String s : set )
System.out.printf("%s ", s );
System.out.println();
}
public static void main(String[] args)
{
Exercicio3 entrada = new Exercicio3();
entrada.executa();
}
}
[/code][/quote]
Bom dia Paulo Mour.
Pelo oque entendi, você precisaria excluir as palavras repetidas.
Mas na forma em que implementou, está criando uma lista com uma única posição.
No entanto não terá repetição.
Se quer quebrar a frase digitada em palavras tera que usar o split “(quebrando por espaço por exemplo)”.
public void executa()
{
System.out.println("Digite uma frase: ");
String frase = input.nextLine();
list = Arrays.asList(frase.split(" "));
System.out.printf("Frase: %s\n", list );
naoDuplicadas( list );
}
Com a dica do Diego funcionou da forma como eu queria, faltou o método split. Para confirmar a quebra da frase, no fim do método naoDuplicadas dei um set.size e retornou o nº de palavras no array. Da forma como o Nel e o evefuji sugeriram não funcionou como eu queria mas de qualquer forma me ajudaram a entender o procedimento.