扫描仪分隔符,用“”和“\ n”java分隔令牌

时间:2017-03-10 22:11:45

标签: java java.util.scanner token delimiter

我正在尝试从一个看起来像这样的文件中读取令牌

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

2 个答案:

答案 0 :(得分:1)

一个非常常见的问题是你忘记修剪弦乐。试试这个:

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

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

答案 1 :(得分:1)

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

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()的帮助下,您无需计算第二行中的输入数量。