【问题标题】:scanner delimiter to get tokens separated by " " and "\n" java扫描仪分隔符以获取由“”和“\n”分隔的标记 java
【发布时间】:2017-03-10 22:11:45
【问题描述】:

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

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

【问题讨论】:

  • 根据 javadoc,扫描仪的默认分隔符是什么? javadoc如何定义默认分隔符?
  • 您的模式匹配空格后跟换行符,而不是空格或换行符。
  • @JBNizet 它确实是空格......哎呀。我认为它不会在输入时起作用,但我看到它确实如此
  • @nfnneil 您的回答很有帮助,但我无法将其标记为正确答案,因为这不是我在标题中写的答案
  • @Bubletan 很高兴知道

标签: java java.util.scanner token delimiter


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

【讨论】:

    【解决方案2】:

    一个非常常见的问题是您忘记修剪字符串。试试这个:

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

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

    【讨论】:

    • 可能也是这样,但还是不行:(谢谢你的回答
    • 成功了!很好 :D 我根本不需要使用自定义分隔符。另外,没有修剪它就无法工作,所以再次感谢您
    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 2011-01-23
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多