标记化数组中的空白空间

时间:2014-10-13 04:13:19

标签: java file-io

我正在编写一个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)

2 个答案:

答案 0 :(得分:1)

我试图执行你的程序。我注意到通过分割变量&#39; line&#39;来获取字符串数组。将导致数组

[1, 0, , , 1, 6, 2, 6, 3, 6]

这就是行

的原因
edges.add(new Edge(Integer.parseInt(tokens[i]), 
                        Double.parseDouble(tokens[i + 1]))); 

正在抛出异常。

这里tokens [i]是一个空字符串,它将抛出 NumberFormatException

请检查你的逻辑。

答案 1 :(得分:0)

尝试用此代替以下代码,应解决您的问题。

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

旧代码

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

新代码

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