扫描器定界符以获取由“”和“\n”分隔的标记 java

scanner delimiter to get tokens separated by " " and "\n" java

我正在尝试从如下所示的文件中读取标记

4 2
3 1 2 3

所以我希望这些标记由“”或输入 (\n) 分隔。 我该如何实现?

我尝试了一些,但没有成功。

in = new FileInputStream("input.txt");
        scan = new Scanner(in);

        scan.useDelimiter(" \n");

        System.out.println("I get here");

        t = new Translator(Integer.parseInt(scan.next()), Integer.parseInt(scan.next()));

        System.out.println("I don't get here");

        int temp = Integer.parseInt(scan.next());
        while(temp > 0){
            m.final_states.add(Integer.parseInt(scan.next()));
            temp--;
        }

我似乎找不到任何关于我想要的分隔符类型的相关信息。我看过几个例子,我也读过文档中的例子,但我很困惑。

我得到的错误是java.lang.NumberFormatException

一个很常见的问题是您忘记 trim 字符串。试试这个:

m.final_states.add(Integer.parseInt(scan.next().trim()));

t = new Translator(Integer.parseInt(scan.next().trim()), Integer.parseInt(scan.next().trim()));

Scanner 的好处是它允许读取原始类型 w/o 显式转换。您可以尝试以下方法:

try (FileInputStream source = new FileInputStream(PATH)) {
    Scanner scanner = new Scanner(source);
    Translator translator = new Translator(scanner.nextInt(), scanner.nextInt());
    while(scanner.hasNextInt()){
        m.final_states.add(scanner.nextInt());
    }    
}

请注意,在 scanner.hasNextInt() 的帮助下,您无需计算第二行的输入数。