我在尝试从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 / splits有关吗?
由于
这是工作中的一个:
sque = 1923 3208 3214 1 0 2 Square
但是,我正试图加载其中400多个,一次更改所有这些将是痛苦的
答案 0 :(得分:0)
从异常看,传递给int转换例程的任何东西都不是可解析的整数。
实际上看起来你的程序没有正确地解析输入字符串而留下数字序列,可能是因为你使用了“\ t”。我会检查正则表达式,看看你是否真的可以找到这些标签并正确拆分这个文件,然后转换为整数。
你还可以成为一名防御性程序员,在将它实际转换为int之前检查字符串是否可转换为int。
public static boolean isNumeric(String aStringValue) {
Pattern pattern = Pattern.compile( "\\d+" );
Matcher matcher = pattern.matcher(aStringValue);
return matcher.matches();
}
另外,只是为了调试试试:
s = s.replaceAll("\\t","|");
看看它是怎么样的。
答案 1 :(得分:0)
对,因为:
"1923 3208 3214 1 0 2 "
不是数字。异常似乎很清楚 - 您需要将该行标记为数字部分,然后逐个解析。
答案 2 :(得分: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()
解释。