Java字符串拆分,不像我设想的那样工作

时间:2014-10-01 09:05:33

标签: java string split

所以我正在尝试为我的一些朋友制作一个游戏的粉丝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

ķ

等等

4 个答案:

答案 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("\\|\\|");

因为||是正则表达式中的特殊字符。