我试图在JTextArea中使用正则表达式分割文本,通过\n分割字符串,然而,这并不奏效,我也尝试了\r\n|\r|n和许多其他正则表达式组合。 代码:

public void insertUpdate(DocumentEvent e) {
    String split[], docStr = null;
    Document textAreaDoc = (Document)e.getDocument();

    try {
        docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset());
    } catch (BadLocationException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    split = docStr.split("\\n");
}

当前回答

String.split(System.lineSeparator());

这应该与系统无关

其他回答

试试这个,希望对你有帮助


 String split[], docStr = null;
Document textAreaDoc = (Document)e.getDocument();

try {
    docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset());
} catch (BadLocationException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

split = docStr.split("\n");

作为前面答案的替代方案,如果要对结果行应用其他操作,如修剪行或过滤空行,可以使用guava的Splitter API:

import com.google.common.base.Splitter;

Iterable<String> split = Splitter.onPattern("\r?\n").trimResults().omitEmptyStrings().split(docStr);

注意,结果是Iterable而不是数组。

保存空行不被压扁使用:

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

如果你不想要空行:

String.split("[\\r\\n]+")

如果出于某种原因,您不想使用String。split(例如,因为正则表达式),并且你想在Java 8或更新版本上使用函数式编程:

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