Сортировка и удаление дубликатов - PullRequest
0 голосов
/ 11 февраля 2020

Ввод данных. Вы будете читать с клавиатуры текст электронного письма, которое необходимо преобразовать. Он может быть разбит на несколько строк.

Выходные данные: отдельные слова в прочитанном тексте в алфавитном порядке будут отображаться по одному за раз.

Ограничения и спецификации Текст не содержит более 100 слов, и каждое слово может содержать до 20 символов. Чтобы сократить время выполнения вашей программы, используйте BufferedReader. Класс, содержащий основной метод, должен называться prog

import java.util.*;
 public class Main {
public static void main(String args[] ) throws Exception {
    Scanner in = new Scanner(System.in);
    Set<String> set = new TreeSet<>();
    int size = in.nextInt();
    for(int i=0 ;i < size ;i++){
        set.add(in.next());
    }
    Iterator i = set.iterator();
    while(i.hasNext()) {
        System.out.println(i.next());
    } 
   }
 }

Я должен сказать слова только один раз, как именно я могу это сделать? Это мой код! Я использовал переменную size для ввода числа с клавиатуры и после ввода текста на форуме, но я хочу прочитать текст напрямую, пока могу ли я сделать это

1 Ответ

1 голос
/ 11 февраля 2020

Для чтения из ввода, используя while, вы можете сделать это:

Scanner in = new Scanner(System.in);
Set<String> set = new TreeSet<>();

while(!in.hasNext("exit")){ //you can put any word for exit
    set.add(in.next());
}

for(String e : set){
    System.out.println(e);
}

Это самый простой способ.

ОБНОВЛЕНИЕ (BufferedReader)

Set<String> words = new TreeSet<>();

try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))){

    String line;
    while((line = reader.readLine()) != null && !line.equals("exit")){

        words.addAll( //add elements from List<String> into Set
                Arrays.asList( //change array with words into List<String>
                    line.split("\\s+") //split line by space -> String[] (array with words)
                )
        );

    }

}catch(Exception e){
    e.printStackTrace();
}

for(String word : words){
    System.out.println(word);
}

TreeSet автоматически удалит дубликаты и отсортирует по алфавиту.

...