我有一个文本文件admin.dat
,如下所示:
blackranger|sdasdasdasd23123|1000
blueranger|sdasdasdasdwhhh22|1000
brownranger|lppsadospd123|1000
我正在尝试阅读每一行,使用|
作为我的分隔符并输出到每个部分的控制台。
代码:
package testing;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
public class Testing {
public static void main(String[] args) {
Scanner filereader = null;
try {
filereader = new Scanner(new File("./src/testing/players.dat"));
String data;
while(filereader.hasNextLine()) {
String foo = "abc|123|a213";
String[] bar = foo.split("|");
for (int i = 0; i < 3; i++) {
System.out.println(bar[i]);
}
}
} catch (FileNotFoundException e) {
System.out.println("File not found");
} catch (IOException e) {
System.out.println("Error while reading file");
} finally {
if (filereader != null) {
filereader.close();
}
}
}
}
预期结果:
blackranger
sdasdasdasd23123
1000
blueranger
sdasdasdasdwhhh22
1000
brownranger
lppsadosph123
1000
实际结果:
a // infinite loop
b
a
b
a
b
a
b
a
b
为什么我会得到永久打印a b
的无限循环?
答案 0 :(得分:5)
您应该转义字符|
,因为它在regex
foo.split("\\|");
但首先,为foo
分配您从文件中读取的值,而不是通过硬编码:
String foo = filereader.nextLine();
答案 1 :(得分:4)
你永远不会从while循环中的fileReader中读取,所以while(filereader.hasNextLine())
总是 是真的,循环永远不会结束。让我感到惊讶的是,看起来你的代码是从循环内部的fileReader中读取的,但是对它进行了评论。为什么呢?
解决方案:不要这样做。确保在while循环中更改测试条件,否则while循环将永远不会结束。
答案 2 :(得分:2)
String foo = filereader.nextLine();
String[] bar = foo.split("\\|");
而不是
String foo = "abc|123|a213";
String[] bar = foo.split("|");