Как я могу заставить свой сканер читать следующую строку в файле? - PullRequest
0 голосов
/ 02 февраля 2019

Я распечатываю содержимое txt-файла, пропуская все числа в нем.

Используемый мной файл выглядит следующим образом:

one two 3 три четыре

пять шесть 7 восемь

Я пытался использовать input2.next () или input2.nextline () после System.out.print (токен), но я либо получаю ошибку, либоне читайте следующую строку точно.

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


public class ScannerClass {


public static void main(String[] args) throws FileNotFoundException {


    System.out.print("Enter file name and extension: ");

    Scanner input = new Scanner(System.in);

    File file = new File(input.next());

    Scanner input2 = new Scanner(file);


    String token;

//this will print out the first line in my txt file, I am having trouble
//reading the next line in the file!

    while ((token = input2.findInLine("[\\p{Alpha}\\p{javaWhitespace}]+")) != null) {
        System.out.print(token);


    }

  }
}

Вывод:

один два три четыре

Я хотел бы видеть весь текстовый файл за вычетом любых чисел, таких как:

один два три четыре

пять шесть восемь

Ответы [ 3 ]

0 голосов
/ 02 февраля 2019

Может быть не самым оптимальным, но это будет работать.Каждая итерация цикла будет разбивать текущую строку на массив строк, ограниченных числом (\\d+), затем каждый элемент массива (в данном случае слова алфавита и пробелы) будет транслироваться и объединяться в одну строку.

while (input2.hasNextLine()) {
    String[] nonNumbers = input2.nextLine().split("\\d+");
    System.out.println(Arrays.stream(nonNumbers).collect(Collectors.joining()));
}
0 голосов
/ 02 февраля 2019

Одна из основных проблем с вашим регулярным выражением состоит в том, что он соответствует только одной части строки сначала перед цифрой, а затем после цифры, в то время как findInLine каким-то образом продвигает счетчик строки.

Итак, вотдругое решение, использующее ваш шаблон reg exp, но я отделил чтение из файла от логики соответствия

Pattern p = java.util.regex.Pattern.compile("[\\p{Alpha}\\p{javaWhitespace}]+");
while (input2.hasNextLine()) {
    String line = input2.nextLine();
    Matcher m = p.matcher(line);
    while (m.find()) {
        System.out.print(m.group()); //Prints each found group
    }
    System.out.println();
}
0 голосов
/ 02 февраля 2019

Вы можете добавить этот RegEx;

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

public class ScannerClass {
    public static void main(String[] args) throws FileNotFoundException {
       System.out.print("Enter file name and extension: ");
       Scanner reader = new Scanner(System.in);
       reader = new Scanner(new File(reader.next()));

       Pattern p = Pattern.compile("[a-zA-Z_]+");
       Matcher m = null;

       while (reader.hasNext()){
          String nextLine = reader.nextLine();
          m = p.matcher(nextLine);
          while(m.find()) {
              System.out.printf("%s ",m.group());
          }
          System.out.println();
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...