【问题标题】:Splitting string into array of strings causing NumberFormatException将字符串拆分为导致 NumberFormatException 的字符串数组
【发布时间】:2013-01-30 19:05:55
【问题描述】:

我很难将文本文件中的每一行拆分为一个字符串数组并按照我的需要使用它。 split() 似乎工作正常。我最终得到了一个字符串数组,其中字符串数组的第一个槽包含一个我需要解析为 int 的数字,以继续我的代码。出于某种原因,我不断收到下面显示的错误,我似乎无法弄清楚。

我的目标是简单地将文本文件中包含字母的每一行存储在一个数组中,并将作为整数的数字解析为该行的第一个值。完成此操作后,我需要能够独立使用前面的每组字母,因此我也尝试将它们放入数组中。

感谢您对此提供的任何帮助。

非常感谢!

注意:numGrammars 是文本文件第一行显示的第一个数字。

我的代码

    numGrammars = Integer.parseInt(fin.next());
    System.out.println("Num Grammars:" + numGrammars);


    for(int v=0; v < numGrammars; v++){
       int numVariables = Integer.parseInt(fin.next());
       System.out.printf("numVariables: %s", numVariables);

        for(int z=0; z < numVariables; z++){
            //reads in variable line
            String line = fin.nextLine();
            String[] strings = line.split(" ");

            for(int m=0; m < strings.length; m++){
               int numRules = Integer.parseInt(strings[0]);
               //All other array slots in strings array should be groups of letters on group per slot...

            }   
        }
    }

控制台输出

Num Grammars:2
numVariables: 3Exception 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 Methods.readFile(Methods.java:34)
at Main.main(Main.java:12)

我正在阅读的文本文件:

1
3
2 S AB BB
3 A BB a b
2 B b c

【问题讨论】:

  • 您似乎正在尝试解析 aplhabets 来代替数字。这就是为什么它的投掷 NumberFormatException 可能是 char S
  • 不,下一个字符不是 S,它是数字 2。当我不解析直接打印出字符串 [0] 时,它会打印出 2。当我尝试将其解析为 int 时打印出来我得到这个错误。
  • 那么它可能会添加空格尝试使用String.trim()Integer.parseInt(" 2") 会抛出异常。向我们展示整个代码可能会更好。
  • 错误信息显示你正在尝试parseInt一个空字符串。
  • @MHZ 代替 fin.next() 仅使用 fin.nextLine();

标签: java regex parsing


【解决方案1】:

仅使用fin.nextLine()。在调用next() 之后,光标正好在numVariables 值3 之后,但是 换行符之前。之后调用 nextLine() 时,它会返回光标和换行符之间的所有内容,这是一个空字符串!每次使用nextLine() 总是将光标放在换行符之后,一切正常。

numGrammars = Integer.parseInt(fin.nextLine());
System.out.println("Num Grammars:" + numGrammars);


for(int v=0; v < numGrammars; v++){
   int numVariables = Integer.parseInt(fin.nextLine());
   System.out.printf("numVariables: %s", numVariables);

    for(int z=0; z < numVariables; z++){
        //reads in variable line
        String line = fin.nextLine();
        String[] strings = line.split(" ");

        for(int m=0; m < strings.length; m++){
           int numRules = Integer.parseInt(strings[0]);
           //All other array slots in strings array should be groups of letters on group per slot...

        }   
    }
}

【讨论】:

    【解决方案2】:

    你没有说 fin 是什么,所以我不能说它对 next() 和 nextLine() 有什么作用,但也许你在字符串中拾取换行符。

    【讨论】:

    • 这是一个推测,最好作为评论而不是答案发布。
    猜你喜欢
    • 2012-02-22
    • 2021-12-06
    • 2016-04-01
    • 2012-06-27
    • 2011-01-10
    • 1970-01-01
    相关资源
    最近更新 更多