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

问题描述 投票:0回答:4

如何从

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

这就是我想出的:

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"));

我见过各种其他问题,但他们似乎不需要保留空行部分。

java
4个回答
4
投票

使用 StringReader 和 Stream:

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

2
投票

你可以尝试使用

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

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


1
投票

如果您不想使用

String.split
所需的正则表达式,您可以使用
readLine
BufferedReader
方法。其文档摘录:

读取一行文本。一行被认为由任何一个换行符 (' '), 回车符 (' '),或回车后紧跟换行符。

注意,它也会在“ “一个人。

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

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

注意,使用 Java 8 会更容易:

String x = ...
BufferedReader reader = new BufferedReader(new StringReader(x));
List<String> lines = reader.lines().collect(Collectors.toList());

0
投票

试试这个:

 String[] lines = String.split("\\r\\n?\\n");

 LinkedList<String> list = new LinkedList<String>();

 for(String s : lines) {
     list.add(s);
 }
© www.soinside.com 2019 - 2024. All rights reserved.