繁体   English   中英

正确的正则表达式,以防止Java扫描程序返回零长度的字符串

[英]Correct Regex to Prevent Java Scanner From Returning a Zero Length String

我正在尝试从文件中读取多个数字,其中多个数字行之间用逗号分隔。 我正在使用的Java代码是:

try {
        Scanner fileScanner = new Scanner(new FileReader(unsolvedBoardLocation));
        Pattern myPattern = Pattern.compile("[,\\r\\n]");
        System.out.println(myPattern.pattern());
        fileScanner.useDelimiter(myPattern);

        while(fileScanner.hasNext()) {
            int i = fileScanner.nextInt();
            System.out.print(i);

        }
    }
    catch(IOException ex) {
        Logger.getLogger(SudokuBoard.class.getName()).log(Level.SEVERE, null, ex);
    }

我正在读取的文件内容没有空格,如下所示:

8,0,0,9,3,0,0,0,2
0,0,9,0,0,0,0,4,0

由于我是在Windows中创建文本文件的,因此我知道在\\ 2之后是\\ r \\ n。在程序的原始版本中,扫描程序返回2 \\ r \\ n,因此我将\\ r \\ n添加到定界符中尝试防止这种情况,但我仍然遇到问题。 我收到一个InputMissmatchException。 完整的堆栈跟踪为:

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:909)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at my.puzzle.sudoku.SudokuBoard.<init>(SudokuBoard.java:31)
at my.puzzle.sudoku.Sudoku.main(Sudoku.java:8)
    Java Result: 1

我认为我收到此异常的原因是因为Scanner在2末尾返回“”。这不是nextInt()所期望的,因此引发了错误。 我试图防止这种情况,但是我不确定如何仅使用正则表达式来做到这一点。 因为我正在生成输入文件,所以我可以简单地使用空格格式化它并使它工作。 我还可以将每个令牌读取为一个字符串,并检查该字符串是否可以读取为有效数字,如果不能,请移至下一个令牌; 但是,出于我自己的学习目的,我想知道仅使用正则表达式是可以做到的。 我已经阅读过有关正则表达式的Java教程,但是我以前从未使用过正则表达式,并且遇到了麻烦。

要明确的是,我的问题是“在这种情况下,如何防止正则表达式返回长度为零的字符串”。

我能得到的任何帮助将不胜感激。 提前致谢!

$结束正则表达式或尝试\\d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM