这是我试图从
中读取的.txt文件20,Dan,09/05/1990,3,Here
5,Danezo,04/09/1990,99,There
这就是我在做的方式..每当.txt文件只有一行时,它似乎正在从文件中读取。每当读取多行时,我都会收到此错误
Exception in thread "main" java.lang.NumberFormatException: For input string: "Danezo"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at AttackMonitor.readFromFile(AttackMonitor.java:137)
at AttackMonitor.monitor(AttackMonitor.java:57)
at MonsterAttackDriver.main(MonsterAttackDriver.java:14)
Java Result: 1
这是readfromfile代码。
private void readFromFile() throws FileNotFoundException, IOException
{
monsterAttacks.clear();
Scanner read = new Scanner(new File("Attacks.txt"));
read.useDelimiter(",");
String fullDateIn = "";
int attackIdIn = 0;
int attackVictimsIn = 0;
String monsterNameIn= "";
String attackLocationIn= "";
while (read.hasNext())
{
attackIdIn = Integer.parseInt(read.next());
monsterNameIn = read.next();
fullDateIn = read.next();
attackVictimsIn = Integer.parseInt(read.next());
attackLocationIn = read.next();
monsterAttacks.add(new MonsterAttack(fullDateIn, attackIdIn, attackVictimsIn, monsterNameIn, attackLocationIn));
}
read.close();
}
答案 0 :(得分:2)
发生的事情是,每行末尾都有一个换行符,当前不是分隔符。所以你的代码试图将它读作下一行的第一个整数,而不是。这导致了解析异常。
要解决此问题,您可以尝试将新行添加到要扫描的分隔符列表中:
Scanner read = new Scanner(new File("Attacks.txt"));
read.useDelimiter("[,\r\n]+"); // use just \n on Linux
另一种方法是从文件中读取每一行,然后用逗号分隔:
String[] parts = read.nextLine().split(",");
attackIdIn = Integer.parseInt(parts[0]);
monsterNameIn = parts[1];
fullDateIn = parts[2];
attackVictimsIn = Integer.parseInt(parts[3]);
attackLocationIn = parts[4];
答案 1 :(得分:0)
您可以使用Biegeleisen建议。否则你可以这样做。
在while循环中,您使用hasNext
作为条件。而不是你可以使用while (read.hasNextLine())
并在循环中获取nextLine,然后通过分隔符将其拆分并进行处理。那将是一种更合适的方法。
e.g
while (read.hasNextLine()) {
String[] values = scanner.nextLine().split(".");
// do your rest of the logic
}
答案 2 :(得分:0)
将while循环内容放在try catch中,并捕获NumberFormatException。因此,无论何时捕获代码,您都可以理解您尝试将字符串转换为int。 如果您的业务得到解释,可以提供更多帮助。
答案 3 :(得分:-1)
attackLocationIn = read.next();
此值取为"此处\ n 5"因为Here和5之间没有逗号,它有新行字符。
所以第二次迭代attackIdIn = Integer.parseInt(read.next());
这里read.next()
值是" Danezo"它是String,你正在尝试解析Integer。这就是你得到这个例外的原因。
我的建议是使用BufferReader
逐行阅读并用逗号分隔每一行。它也会很快。
或其他解决方案在每行末尾添加逗号并在代码中使用read.next().trim()
。这就是它适用于您当前代码的最小更改。