Печать слов из текстового файла - PullRequest
1 голос
/ 07 мая 2020

Прямо сейчас у меня есть эта программа, которая запускает текстовый файл и печатает строки из файла, начинающиеся с A или T. Теперь я привязываю, чтобы сделать так, чтобы она просто печатала слова, заканчивающиеся на, или; Кто-нибудь думает, что они могут мне помочь?

Вот моя программа rn

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String args[]) throws IOException {
        Scanner sf = new Scanner(new File("amazing.txt")); 
        List<String> text = new ArrayList<>();

        while (sf.hasNextLine()) {
            String current = sf.nextLine(); 
            if (current.startsWith("T") || current.startsWith("A")) {
                System.out.println(current);
            }
        }
        sf.close(); 
    }
}

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Используйте String#endsWith?

while (sf.hasNextLine()) {
    String current = sf.nextLine(); 
    if (current.endsWith(",") || current.endsWith(";"))
        System.out.println(current);
}

Несколько более сложным решением может быть использование сопоставления регулярных выражений для этой проверки:

while (sf.hasNextLine()) {
    String current = sf.nextLine(); 
    if (current.matches(".*[,;]\\s*"))
        System.out.println(current);
}

Это позволит проверить, что каждая строка заканчивается на запятая или точка с запятой, возможно, с пробелом после него.

1 голос
/ 07 мая 2020

@ TimBiegeleisen уже предоставил отличный ответ.

Для полноты позвольте мне также предоставить потоковое решение, которое использует NIO (Javas более новый, современный File API), который использует его проверку:

Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(System.out::println);

Код требует как минимум Java 11 из-за Path.of. Или Java 8, если вы используете вместо него Paths.get("amazing.txt").


Если вы намеревались добавить эти строки в text вместо их печати, вы можете легко изменить код:

Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .forEach(text::add);

Или пусть поток сам создаст список, тогда не обязательно:

List<String> text = Files.lines(Path.of("amazing.txt"))
    .filter(line -> line.matches(".*[,;]\\s*"))
    .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...