所以我正在尝试为我的一些朋友制作一个游戏的粉丝java程序,我正在尝试读取文本文件的内容以便将来存储到数组/ arraylist但我是无法按照我希望的方式进行字符串拆分工作。我尝试了这个地方的例子,这些例子对人们起作用,只是为了看看它是否会起作用,但我得到了相同的输出。
importCards.java
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader("dark.txt"));
String read = null;
while ((read = in.readLine()) != null) {
read = in.readLine();
String[] splited = read.split("||");
for (String part : splited) {
System.out.println(part);
}
}
} catch (IOException e) {
System.out.println("There was a problem: " + e);
e.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e) {
}
}
文本文件的格式如下
17||Dark Soul Endor||Dark||2||1||Human||Main Characters||5|500000||833||126||78||23||Release of Spirit - Dark||Dissolve all Light Runestones to inflict Dark on all enemies||Power of Dark||Dark Attack x 150%
然而,当我尝试并打印它时,我得到了这个
1
8
|
|
d
一
[R
ķ
等等
答案 0 :(得分:2)
正则表达式具有特殊标记,例如|
,这并不意味着|
字面意思,但在这种情况下意味着OR。即在这种情况下"" OR "" OR ""
当你用空字符串匹配时,它会将每个字符分成它自己的字符串。
你的意图
String[] splited = read.split("\\|\\|");
您可能想知道,为什么两个\\|
而不是\|
原因是\
在Java和正则表达式中具有特殊含义。当你在Java中编写\\|
时,它变为"\|"
作为字符串,即两个字符,作为正则表达式|
字面意思,而不是特殊标记。
BTW我建议你使用,
或\t
(标签)。这不仅会更小,而且您可以在自己喜欢的电子表格编辑器(如Excel或LibreCalc)中编辑该文件。这样可以更容易地查看列的位置,甚至可以添加/删除列或更改其顺序。
暗黑破坏神II使用,
作为其原始数据文件。 ;)
如果您阅读CSV或TSV文件,可以使用库来更轻松地阅读/导入,例如OpenCSV's CSVReader
答案 1 :(得分:1)
split()
使用正则表达式,而|
是一个正则表达式特殊字符,表示“或”,因此您按“空字符串”或“空字符串”或“空”拆分字符串“
你需要逃避它们:"\\|\\|"
。
答案 2 :(得分:0)
您需要将||
视为\\|\\|
例如:
String str = "17||Dark Soul Endor||Dark||2||1||Human||Main Characters||5|500000||833||126||78||23||Release of Spirit - Dark||Dissolve all Light Runestones to inflict Dark on all enemies||Power of Dark||Dark Attack x 150%";
String[] splited = str.split("\\|\\|");
for(String i:splited){
System.out.println(i);
}
答案 3 :(得分:0)
删除read = in.readLine();
,因为您在示例中阅读了2行并将te拆分更改为:
String[] splited = read.split("\\|\\|");
因为||
是正则表达式中的特殊字符。