添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

**本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接 **

我尝试使用正则表达式 \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");

------------------------------以下为回答,按支持票数排序----------------------------------

回答1(支持票数785):

将代码中的

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

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

后,就可以解决你的问题,匹配到两种系统(linux和window)中的换行符

回答2(支持票数152):

String类的split​(String regex)方法可以使用正则表达式[regex(regular expressions)],

java从java8起正则表达式支持\R (在java官方文档Pattern 类中有说明,链接:docs.oracle.com/javase/8/do…):

换行符 匹配
\R         可以匹配任意字符集换行符, 等同于 \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

所以我们可以用它去匹配到如下换行符:

  • \u000D\000A -> \r\n 
  • \u000A -> 换行line feed (\n)
  • \u000B -> 表格换行line tabulation (DO NOT confuse with character tabulation \t which is \u0009)
  • \u000C -> 换页form feed (\f)
  • \u000D -> 回车carriage return (\r)
  • \u0085 -> 下一行next line (NEL)
  • \u2028 -> 行分隔line separator
  • \u2029 -> 段落分隔paragraph separator
  • 可见\R是原理上是优先使用\r\n进行匹配,当\r\n匹配不到时才用单字符换行符去匹配

    If you don't want to remove from resulting array trailing empty strings "" use split(regex, limit) with negative limit parameter like split("\\R", -1).

    If you want to treat one or more continues empty lines as single delimiter use split("\\R+").

    因此,如果你想要通过行分隔符进行分隔,应使用split("\\R")

    如果你想要保留结果数组中的空字符串应使用Stringsplit(regex, limit)方法,参数为split("\\R", -1)

    如果你想要把一个或多个空号视为单个定界符就是使用split("\\R+")

    文章翻译自Stack Overflow :链接

  •