我正在从一个看起来完全像这样的文本文件中读取一长串信息:
Sebastien 5000\\Loic 5000\\Shubhashisshh 5000\\Thibaullt 5000\\Caroo 5000\\Blabla 5000\\Okayyy 5000\\SebCed 5000\\abusee 5000\\omg 5000\\
它应该是用户名称的高分。当我打印出该行时,它看起来应该是这样,但是当我使用split("\\\\")
后打印出数组时,它看起来像这样:
[Sebastien 5000, , Loic 5000, , Shubhashisshh 5000, , Thibaullt 5000, , Caroo 5000, , Blabla 5000, , Okayyy 5000, , SebCed 5000, , abusee 5000, , omg 5000]
问题是Array[0]
没问题但Array[1]
为空,Array[3]
,Array[5]
等等。
这是我的代码。怎么了?
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(path));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line = null;
try {
line = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("LINE = "+line);
String[] scores = line.split("\\\\");
System.out.println("Mode = "+mode+Arrays.toString(scores));
答案 0 :(得分:9)
这是因为"\\\\"
被解析为\\
而split method使用了正则表达式,因此\\
正在变为\
,然后Sebastien 5000\\Loic 5000
会产生[Sebastien 5000,,Loic 5000]
请改为:"\\\\\\\\"
答案 1 :(得分:3)
只是为了好玩,除了JoséRoberto解决方案之外,你还可以使用一些替代表达式(还有很多其他表达式):
两个连续反斜杠(与José相同,但使用量词):
String[] scores = line.split("\\\\{2}");
连续两个非单词字符:
String[] scores = line.split("\\W{2}");
连续两个标点字符:
String[] scores = line.split("\\p{Punct}{2}");
所有这些都产生了所需的输出。
有关Java中正则表达式的更多信息:
答案 2 :(得分:0)
我会比尼克走得更远:
line.split("\\\");
此视图假设您尝试在出现双反斜杠的每个点处拆分行 - 看起来您的代码在每个备用双斜杠处分裂,这将解释每个名称之间的双逗号;因此,在每个分割部分之间(即逗号之间的每个部分,有两个条目而不是一个,因此一个条目仅仅是一个逗号)。看看这是否有效 - 祝你好运!
微米。