我正在编写一个Java程序,该程序需要一个文本文件,将其在空格和>上分割,然后通过Integer.parseInt()Double.parseDouble()操纵数字。

但是,每当我尝试运行程序时,都会得到一个NumberFormatException,因为显然我的程序正在为令牌获取空白空间。下面是我的代码,文本文件和错误。

码:

try {
        Scanner scanner = new Scanner(file);
        while(scanner.hasNextLine()){
            String line = scanner.nextLine();
            String[] tokens = line.split(" |>");

            State s = new State(Integer.parseInt(tokens[1]), 0,
                    Double.parseDouble(tokens[0]), null);
            states.put(s.state, s);

            for(int i = 3; i < tokens.length; i++) {
                if(tokens[i + 2] == null || tokens[i] == "")
                    break;
                else
                    edges.add(new Edge(Integer.parseInt(tokens[i]),
                        Double.parseDouble(tokens[i + 1])));

                }
        }
        scanner.close();
} catch (FileNotFoundException e) {
    System.err.println("Error: file could not be found");
}


要解析的文本文件:

1 0 > 1 6 2 6 3 6
1 1 > 4 -1
1 2 > 8 -1
1 3 > 9 -1
1 4 > 1 -1 5 -1 6 -1
1 5 >
1 6 > 7 -1 8 -1
1 7 >
1 8 > 7 -1
0 9 >


错误信息:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at csu.mcdonald.ASrch.main(ASrch.java:33)

最佳答案

尝试以此替换下面的代码,应该可以解决您的问题。

拆分的输出为-[1, 0, , , 1, 6, 2, 6, 3, 6]

旧代码

 if(tokens[i + 2] == null || tokens[i] == ""))


新密码

if(tokens[i + 2] == null || tokens[i].equals(""))

关于java - 标记化数组中的空白空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26332790/

10-08 22:26