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 之前检查 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 回答