如何从
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"));
使用 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();
你可以尝试使用
String[] result = yourString.split("\r?\n", -1);
-1
参数是limit
,它的负值意味着不应从结果String[]
数组中删除尾随空字符串(我假设将此数组转换为List<String>
对您来说不是大问题)。
如果您不想使用
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());
试试这个:
String[] lines = String.split("\\r\\n?\\n");
LinkedList<String> list = new LinkedList<String>();
for(String s : lines) {
list.add(s);
}