Java 获取列表的简单方法<;字符串>;通过在EOL上拆分字符串?

Java 获取列表的简单方法<;字符串>;通过在EOL上拆分字符串?,java,Java,如何从字符串中的行中获取列表?我想将CRLF(\r\n)和LF(\n)作为下线处理。空行(包括尾随的空行)需要保留,以便我可以使用String.join(“\n”,…)返回原始String(但是,我不介意CRLFs是否变为LFs) 这就是我想到的: String x = "\r\n\r\na\nb\r\nc\n\r\n\n"; List<String> lines = Arrays.asList(org.apache.commons.lang3.StringUtils.splitP

如何从
字符串
中的行中获取
列表
?我想将
CRLF
\r\n
)和
LF
\n
)作为下线处理。空行(包括尾随的空行)需要保留,以便我可以使用
String.join(“\n”,…)
返回原始
String
(但是,我不介意
CRLF
s是否变为
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"));
String x=“\r\n\r\na\nb\r\nc\n\r\n\n”;
列表行=Arrays.asList(org.apache.commons.lang3.StringUtils.splitPreserveAllTokens(x.replace(“\r“,”),“\n”);
我见过其他的,但它们似乎不需要保留空行部分。

您可以尝试使用

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

-1
参数是
limit
,它的负值意味着不应从生成的
字符串[]
数组中删除尾随的空字符串(我假设将此数组转换为
列表对您来说不是大问题)。其文件摘录:

读一行文字。一行被认为是由换行符('\n')、回车符('\r')或紧接着换行符的回车符中的任意一个终止的

注意,它也单独在“\r”上拆分。

因此,您将基本上执行以下操作:

String x = ...
BufferedReader reader = new BufferedReader(new StringReader(x));
List<String> lines = new ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
    lines.add(line);
}
字符串x=。。。
BufferedReader读取器=新BufferedReader(新StringReader(x));
列表行=新的ArrayList();
弦线;
而((line=reader.readLine())!=null){
行。添加(行);
}
注意,使用Java 8更容易:

String x = ...
BufferedReader reader = new BufferedReader(new StringReader(x));
List<String> lines = reader.lines().collect(Collectors.toList());
字符串x=。。。
BufferedReader读取器=新BufferedReader(新StringReader(x));
列表行=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);
 }
String[]行=String.split(\\r\\n?\\n”);
LinkedList=新建LinkedList();
用于(字符串s:行){
列表。添加(s);
}

使用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());
String x=“\r\n\r\na\nb\r\nc\n\r\n\n”;
列表列表=新的BufferedReader(新的StringReader(x))
.行()
.collect(Collectors.toList());

String.split()销毁尾随行。
String.split
采用正则表达式,因此,您可以轻松处理
CRLR
LF
。我不知道如何
如果n为非正,则该模式将被应用尽可能多的次数,并且阵列可以具有任意长度。
转换为它以这种方式工作,但它可以工作![String.split(String,int)][中的示例甚至有这个!