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

当前回答

城里新来了一个男孩,所以你不需要处理所有这些复杂的事情。 从JDK 11开始,只需要编写一行代码,它会分割行并返回字符串流。

public class MyClass {
public static void main(String args[]) {
   Stream<String> lines="foo \n bar \n baz".lines();
   //Do whatever you want to do with lines
}}

一些参考。 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html(行) https://www.azul.com/90-new-features-and-apis-in-jdk-11/

我希望这对一些人有所帮助。快乐的编码。

其他回答

在JDK11中,String类有一个lines()方法:

返回从此字符串中提取的行流,以 行结束符。

此外,文件继续说:

行结束符是以下之一:换行字符"\n" (U+000A),一个回车字符“\r”(U+000D),或者一个回车 返回后跟换行“\r\n”(U+000D U+000A)。一个 行是0个或多个字符的序列,后跟一个 行结束符,或者它是一个或多个字符的序列 后面跟着字符串的末尾。行不包括行 终结者。

这一个可以简单地做:

Stream<String> stream = str.lines();

然后如果你想要一个数组:

String[] array = str.lines().toArray(String[]::new);

鉴于此方法返回一个流,它为您提供了许多选项,因为它使您能够编写简洁和声明性的可能并行操作的表达式。

城里新来了一个男孩,所以你不需要处理所有这些复杂的事情。 从JDK 11开始,只需要编写一行代码,它会分割行并返回字符串流。

public class MyClass {
public static void main(String args[]) {
   Stream<String> lines="foo \n bar \n baz".lines();
   //Do whatever you want to do with lines
}}

一些参考。 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html(行) https://www.azul.com/90-new-features-and-apis-in-jdk-11/

我希望这对一些人有所帮助。快乐的编码。

如果你不想要空行:

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

这里给出的所有答案实际上都不尊重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正在使用它 它不匹配多个新行 它不移除尾随的空行

上面的代码实际上没有做任何可见的事情——它只是计算然后转储计算结果。这是你使用的代码,还是这个问题的一个例子?

尝试执行textAreaDoc。insertString(int, String, AttributeSet)在结束?