**本文正在参加「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")
。
如果你想要保留结果数组中的空字符串应使用String
的split(regex, limit)
方法,参数为split("\\R", -1)
如果你想要把一个或多个空号视为单个定界符就是使用split("\\R+")
。
文章翻译自Stack Overflow :链接