如果检测到分隔符,请在行尾添加空格?

时间:2016-12-08 11:24:37

标签: java

我创建了一个方法,允许我阅读文本文件并将单个单词放入由|分隔的自己的元素中。

示例:

0 | john | smith | potato |

以上将变成:

0
john
smith
potato

如果检测到,我是否可以在该行的最后添加空格(|)?我希望它以这种方式完成,所以我可以做到这一点:

0
john
smith
potato
<-- empty spot goes here -->

这是我到目前为止所做的:

public static String[] read() throws IOException {
    String str = null;
    List<String> list = new ArrayList<String>();
    BufferedReader in = new BufferedReader(new FileReader("test.txt"));
    while ((str = in.readLine()) != null) {
        for (String token : str.split("\\|")) {
            list.add(token);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

String.split作为修剪前导空单元的奇怪习惯,所以如果你有

potato||

结果将是

[potato]

但你可以告诉我不要用split("\\|", -1)修剪它。这将导致

[potato,,] //3 cells

阅读doc of Split了解详情。以下是limit解释:

  

limit参数控制模式的应用次数,因此会影响结果数组的长度。如果限制 n大于零,那么模式将被应用最多n - 1次,数组的长度将不大于n ,并且数组的最后一个条目将包含除最后一个匹配分隔符之外的所有输入。如果 n为非正,则模式将尽可能多地应用,数组可以具有任何长度。如果 n为零,则模式将被应用尽可能多次,数组可以具有任何长度,尾随空字符串将被丢弃

答案 1 :(得分:0)

不幸的是,split()方法在最后一次出现后没有任何内容的情况下也没有能力考虑另一个元素。请在Java repl:

上试试
java> "a | b | ".split("\\|")
java.lang.String[] res1 = ["a ", " b ", " "]
java> "a | b |".split("\\|")
java.lang.String[] res2 = ["a ", " b "]

如果字符串以字符结尾,则可以手动添加另一个元素,例如:

for (String token : str.split("\\|")) {
    list.add(token);
}
if (str.endsWith("|") {
    list.add("");
}