• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przechodzenie po pliku i filtrowanie danych

VPS Starter Arubacloud
0 głosów
124 wizyt
pytanie zadane 13 sierpnia 2020 w Java przez Kazek Początkujący (460 p.)

Cześć, mam plik tekstowy z losowymi wyrazami i chcę z niego wyodrębnić tylko takie wyrazy, które składają się wyłącznie z dużych liter. Z tym nie mam problemu, wiem jak to zrobić za pomocą regexa, ale nie wiem, jak poruszać się po każdej linijce pliku i sprawdzać je z osobna.

Mój kod: 

public class ZAD3 {
    static String readFile(String pathname) throws IOException {
        File file = new File(pathname);
        StringBuilder fileContents = new StringBuilder((int) file.length());

        try (Scanner scanner = new Scanner(file)) {
            while (scanner.hasNextLine()) {
                fileContents.append(scanner.nextLine()).append(System.lineSeparator());
            }
            return fileContents.toString();
        }
    }

    static String[] onlyUpperLettersStrings(String file) {
        String regex = "[A-Z]+";
        String[] correctWords = new String[(int) file.length()];

        return correctWords;
    }

    public static void main(String[] args) throws IOException {
        String file = new String("fileZAD3.txt");
        // String[] correctWords = onlyUpperLettersStrings(file);
        // System.out.println(file);
    }
}

Czy w metodzie onlyUpperLetterStrings muszę używać bufferred readera? czy można to zrobić w zwykłej pętli? A może jakoś mogę uprościć kod z czytaniem pliku? Z góry dziękuję za pomoc :D 

1 odpowiedź

+1 głos
odpowiedź 14 sierpnia 2020 przez mbabane Szeryf (79,280 p.)

Linie z pliku pobierasz tak:

String line = scanner.nextLine();

Co wydaje mi się że wiesz bo tego używasz. Rozumiem, że chodzi Ci o to jak teraz poruszać się po tej linii. Można to zrobić na wiele sposobów, trochę zależy jaki format mają te linie. Widzę dwa sposoby albo grupowanie z regexpa, albo wykorzystanie splita z klasy String i potem na wyniku użyć przygotowanego regexpa do sprawdzenia kryteriów (można też ręcznie sprawdzać znak po znaku). Wszystko zależy jak to wygląda w pliku.

https://www.tutorialspoint.com/javaregex/javaregex_capturing_groups.htm

komentarz 14 sierpnia 2020 przez mbabane Szeryf (79,280 p.)

Jeśli plik nie jest jakiś ogromny to można użyć klas z pakietu NIO i wczytać plik do List<String>:

Path path = Paths.get("file.txt");
try{
 
  List<String> contents = Files.readAllLines(path);
 
  //Read from the stream
  for(String content:contents){//for each line of content in contents
    System.out.println(content);// print the line
  }
 
  }catch(IOException ex){
  ex.printStackTrace();//handle exception here
}

 

Podobne pytania

0 głosów
3 odpowiedzi 680 wizyt
0 głosów
0 odpowiedzi 329 wizyt
0 głosów
3 odpowiedzi 1,527 wizyt
pytanie zadane 27 listopada 2019 w JavaScript przez michal_php Stary wyjadacz (13,700 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...