Odczyt słów z pliku

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

cześć,

poniższy konstruktor (argument File) tworzy obiekt posiadający List<string> sortedWords. Mam problem, żeby przekształcić kod w taki sposób żeby kontruktor dodawał do listy nie całe linijki ale każde słowo z osobna. Próbowałem metodę .split("") niestety nie udało mi się napisać poprawnej metody.

Kopiuj
  public SortedWordsFromFile(File file) throws IOException {
        sortedWords = new ArrayList<>();
        try {
            FileReader in = new FileReader(file);
            BufferedReader br = new BufferedReader(in);
            String line = br.readLine();
            while (line != null) {
                sortedWords.add(line);
                line = br.readLine();
            }
            Collections.sort(sortedWords);
            br.close();
           //tutaj próbowałem metody .split (" ") i wyskakiwał NullPointerException
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2

Chcesz odczytać z pliku słowa i posortować alfabetycznie?

Kopiuj
        List<String> data = Files.lines(Paths.get("input.txt"))
                .map(x -> x.split(" "))
                .flatMap(Arrays::stream)
                .collect(Collectors.toList());
        Collections.sort(data);
TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

dokładnie o to chodzi. Jeszcze nie za bardzo sznam stream Javy, ale akurat dobra okazja żeby przeanalizować ten sposób. Dziękuję

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

Wielkiej filozofii tam nie ma ;) lines() zwraca strumień linii z pliku, map na każdej linii wywołuje split więc każdą linię zamienia na tablicę słów, następnie Arrays.stream() każdą taką tablicę słów zamienia na strumień słów, a flatMap() składa te wszystkie strumienie w jeden, na koniec collect zbiera cały wielki strumień słów do listy ;]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.