通过在EOL上拆分从String获取List <string>的简单方法?

时间:2015-06-19 12:33:53

标签: java

如何从List<String>的行中获得String?我想将CRLF\r\n)和LF\n)作为EOL处理。空行(包括那些尾随行)需要保留,以便我可以使用String.join("\n", ...)取回原始String(但是,我不介意CRLF成为LF }}为s)。

这就是我想出来的:

String x = "\r\n\r\na\nb\r\nc\n\r\n\n";

List<String> lines = Arrays.asList(org.apache.commons.lang3.StringUtils.splitPreserveAllTokens(x.replace("\r", ""), "\n"));

我见过various其他questions,但他们似乎不需要保留空行部分。

4 个答案:

答案 0 :(得分:3)

使用StringReader和Stream:

    String x = "\r\n\r\na\nb\r\nc\n\r\n\n";
    List<String> list = new BufferedReader(new StringReader(x))
        .lines()
        .collect(Collectors.toList());

答案 1 :(得分:2)

您可以尝试使用

String[] result = yourString.split("\r?\n", -1);

-1参数为limit,其负值表示不应从结果String[]数组中删除尾随空字符串(我假设将此数组转换为List<String>对你来说不是大问题。)

答案 2 :(得分:1)

如果您不想使用String.split所需的正则表达式,则可以使用readLine的{​​{1}}方法。摘录其文档:

  

读取一行文字。一条线被认为是由换行符('\ n'),回车符('\ r')或回车符后面的任何一个终止。

请注意,它也会单独拆分为“\ r \ n”。

所以你基本上会做以下事情:

BufferedReader

注意,使用Java 8更容易:

String x = ...
BufferedReader reader = new BufferedReader(new StringReader(x));
List<String> lines = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
    lines.add(line);
}

答案 3 :(得分:0)

试试这个:

bundle exec rake routes