• 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

Object Storage Arubacloud
0 głosów
129 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 690 wizyt
0 głosów
0 odpowiedzi 329 wizyt
0 głosów
3 odpowiedzi 1,569 wizyt
pytanie zadane 27 listopada 2019 w JavaScript przez michal_php Stary wyjadacz (13,700 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...