0

txtファイルから特定のデータを読み込もうとしているときにこのエラーが発生しました。

public static boolean initalize(String FileName) {
    String line = "";

    String token = "";

    String token2 = "";

    String token2_2 = "";

    String[] token3 = new String[10];

    boolean EndOfFile = false;

    BufferedReader characterfile = null;

    try {

            characterfile = new BufferedReader(new FileReader("./Data/data/"

                            + FileName));

    } catch (FileNotFoundException fileex) {
        Misc.println("File not loaded");

            return false;

    }

    try {

            line = characterfile.readLine();

    } catch (IOException ioexception) {


            return false;

    }

    while ((EndOfFile == false) && (line != null)) {

            **line = line.trim();
            int spot = line.indexOf("=");
            if (spot > -1) {
                    token = line.substring(0, spot);
                    token = token.trim();
                    token2 = line.substring(spot + 1);
                    token2 = token2.trim();
                    token2_2 = token2.replaceAll("\t\t", "\t");
                    token2_2 = token2_2.replaceAll("\t\t", "\t");
                    token2_2 = token2_2.replaceAll("\t\t", "\t");
                    token2_2 = token2_2.replaceAll("\t\t", "\t");
                    token2_2 = token2_2.replaceAll("\t\t", "\t");
                    token3 = token2_2.split("\t");**

                    if (token.equals("drop")) {

                            int id = Integer.parseInt(token3[0]);

                            int x = Integer.parseInt(token3[1]);

                            int y = Integer.parseInt(token3[2]);

                            int amount = Integer.parseInt(token3[3]);

                            int height = Integer.parseInt(token3[4]);
                            globalDrops.add(new GlobalDrop(id,amount,x,y,height));  

                    }

            } else {

                    if (line.equals("[ENDOFDROPLIST]")) {

                            try {

                                    characterfile.close();

                            } catch (IOException ioexception) {

                            }

                            return true;

                    }

            }

            try {

                    line = characterfile.readLine();

            } catch (IOException ioexception1) {

                    EndOfFile = true;

            }

    }

    try {

            characterfile.close();

    } catch (IOException ioexception) {

    }

    return false;

}

しかし、それは私にこのエラーを与えています:

[8/3/12 5:24 PM]: Exception in thread "main" [8/3/12 5:24 PM]: java.lang.NumberFormatException: For input string: "1923     3208    3214    1       0       2       "

テキストファイルのフォーマットは次のとおりです。

sque = 1923     3208    3214    1       0       2       Square

なぜこれが私にエラーを与えるのですか?/ t /分割と関係がありますか?

ありがとう

これは機能しているものです:

sque = 1923 3208    3214    1   0   2       Square

しかし、私はこれらを400以上ロードしようとしているので、一度にすべてを変更するのは面倒です。

4

3 に答える 3

0

これをすべて交換してください

                token = line.substring(0, spot);
                token = token.trim();
                token2 = line.substring(spot + 1);
                token2 = token2.trim();
                token2_2 = token2.replaceAll("\t\t", "\t");
                token2_2 = token2_2.replaceAll("\t\t", "\t");
                token2_2 = token2_2.replaceAll("\t\t", "\t");
                token2_2 = token2_2.replaceAll("\t\t", "\t");
                token2_2 = token2_2.replaceAll("\t\t", "\t");
                token3 = token2_2.split("\t");**

String[] cmd = line.split("=");
token = cmd[0].trim;
String[] numbers = cmd[1].split("\\s+");

配列numbersには数値文字列トークンが含まれ、すでにトリミングされており、によって解釈できるようになっていInteger.parseInt()ます。

于 2012-08-03T22:04:53.310 に答える
0

例外から、int変換ルーチンに渡されるものはすべて解析可能な整数ではないように見えます。

おそらく「\t」を使用しているために、プログラムが入力文字列を適切に解析していないように見えます。intに変換する前に、これらのタブを実際に見つけてこのファイルを適切に分割できるかどうかを正規表現で確認します。

また、防御的なプログラマーになるために、実際にintに変換する前に、stringがintに変換可能かどうかを確認することもできます。

public static boolean isNumeric(String aStringValue) {
   Pattern pattern = Pattern.compile( "\\d+" );
   Matcher matcher = pattern.matcher(aStringValue);
   return matcher.matches();

}

また、デバッグのためだけに試してみてください。

s = s.replaceAll("\\t","|");

そしてそれがどのように見えるかを見てください。

于 2012-08-03T21:33:21.240 に答える
0

これが理由で:

"1923     3208    3214    1       0       2       "

数字ではありません。例外はかなり明確に思えます。その行を数値部分にトークン化してから、それぞれを個別に解析する必要があります。

于 2012-08-03T21:34:19.800 に答える