Использование сопоставления с образцом для поиска строковых данных без цифр в Java - PullRequest
0 голосов
/ 16 февраля 2020

Глядя на совпадение только String с без цифр, используя \D из regex.

Каждая строка отображается как false , но почему?

Вывод:

thufir@dur:~/NetBeansProjects/parseCSV$ 
thufir@dur:~/NetBeansProjects/parseCSV$ gradle run

> Task :run                                                                                     
Feb. 16, 2020 5:24:49 A.M. parseCSV.FileHelper processLines
INFO:           false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: z10               false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: y9                false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: x7                false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: atrib6            false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: alice             false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: home5             false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: cell4             false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: sue               false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: phone3            false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: phone2            false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: phone1            false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: joe               false
Feb. 16, 2020 5:24:50 A.M. parseCSV.FileHelper processLines
INFO: people            false

BUILD SUCCESSFUL in 1s
3 actionable tasks: 1 executed, 2 up-to-date
thufir@dur:~/NetBeansProjects/parseCSV$                          

соответствующий метод из класс:

public void processLines() {
    String regex = "\\D";
    boolean isDigit = false;
    for (String s : lines) {
        isDigit = Pattern.matches(regex, s);
        log.info(s + "\t\t" + Boolean.toString(isDigit)
        );

    }

1 Ответ

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

Вы должны использовать шаблон регулярных выражений ^\D+$, который соответствует одному или более непрерывным не ди git символам от начала до конца. Поскольку Pattern#matches неявно охватывает всю строку, мы можем просто использовать \D+:

public void processLines() {
    String regex = "\\D+";
    boolean isDigit = false;
    for (String s : lines) {
        isDigit = Pattern.matches(regex, s);
        log.info(s + "\t\t" + Boolean.toString(isDigit)
        );
    }
}
...