如何按行来分割Java字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (1932)

我试图将文本拆分为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 lines[] = string.split("\\r?\\n");

实际上,您只需要担心两行(UNIX和Windows)。

用户回答回答于

String lines[] =String.split( System.lineSeparator())

用户回答回答于

这里给出的所有答案实际上并不像BufferedReader#readline中给出的那样遵守javas对新行的定义。Java正在接受\n,,,\r\r\n作为新的路线。一些答案匹配多个空行或格式错误的文件。eg.<sometext>\n\r\n<someothertext>使用时[\r\n]+会产生两条线。

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

相反,上面的答案具有以下属性:

  • 它符合javas对新行的定义,例如BufferedReader正在使用它的时候
  • 它不匹配多个新行。
  • 它不会删除拖尾空行。
用户回答回答于

为了防止空行被覆盖,请使用:

String lines[] = String.split("\\r?\\n", -1);
用户回答回答于

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

试试TextAreaDoc。在末尾插入字符串(int,string,AttributeSet)?

用户回答回答于

用反斜杠作为分隔符拆分字符串

split = docStr.split("\n");
用户回答回答于

您不必在字符组中双转义字符。

对于所有非空行,请使用:

String.split("[\r\n]+")
用户回答回答于
String.split(System.getProperty("line.separator"));

这个是从系统中独立出来的。

用户回答回答于

split方法使用regex(正则表达式)。因为Java 8正则表达式支持\R代表(来自模式类文档)):

分界线匹配器\r任何Unicode换行序列,都相当于\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

所以我们可以用它来匹配:

如你所见\r\n放在regex的开始处,这将确保regex将首先尝试与此匹配。成对,只有当它失败时,它才会尝试匹配。单字符线分离器。

因此,如果您想要在线进行拆分,使用split("\\R")...

如果你不想从结果中删除拖尾空字符串""使用split(regex, limit)带负limit参数类split("\\R", -1)...

如果要将一个或多个连续空行视为单个分隔符,请使用split("\\R+")...

用户回答回答于

如果你不想要空行:

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

扫码关注云+社区

领取腾讯云代金券