0

テキストファイルの各行を文字列の配列に分割し、必要に応じて使用するのは非常に困難です。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
4

2 に答える 2

2

のみを使用して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...

        }   
    }
}
于 2013-01-30T21:07:03.870 に答える
-2

あなたはfinが何であるかを言わないので、next()とnextLine()で何をするのかはわかりませんが、おそらく文字列の改行文字を拾っています.

于 2013-01-30T19:39:26.123 に答える