我试图在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");
}

当前回答

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

import com.google.common.base.Splitter;

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

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

其他回答

package in.javadomain;

public class JavaSplit {

    public static void main(String[] args) {
        String input = "chennai\nvellore\ncoimbatore\nbangalore\narcot";
        System.out.println("Before split:\n");
        System.out.println(input);

        String[] inputSplitNewLine = input.split("\\n");
        System.out.println("\n After split:\n");
        for(int i=0; i<inputSplitNewLine.length; i++){
            System.out.println(inputSplitNewLine[i]);
        }
    }

}

这应该包括你:

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

实际上只需要考虑两个换行符(UNIX和Windows)。

如果你不想要空行:

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

java-11中的String类引入了一个新的方法lines,它返回Stream<String>

返回从已分区的字符串中提取的子字符串流 通过行终止符。 识别的行终止符为换行符“\n”(U+000A)、回车 返回"\r" (U+000D)和后面紧跟a的回车 换行“\r\n”(U+000D U+000A)。

下面是一些例子:

jshell> "lorem \n ipusm \n sit".lines().forEach(System.out::println)
lorem
 ipusm
 sit

jshell> "lorem \n ipusm \r  sit".lines().forEach(System.out::println)
lorem
 ipusm
  sit

jshell> "lorem \n ipusm \r\n  sit".lines().forEach(System.out::println)
lorem
 ipusm
  sit

字符串#行()

这里给出的所有答案实际上都不尊重java对新行的定义,例如BufferedReader#readline。Java接受\n, \r和\r\n作为新行。一些答案匹配多个空行或格式错误的文件。E . g。当使用[\r\n]+时,<someothertext> \n\r\n<someothertext>将导致两行。

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

相比之下,上面的答案具有以下性质:

它符合java对新行的定义,例如BufferedReader正在使用它 它不匹配多个新行 它不移除尾随的空行