dr.*_*an 372 java regex split newline
我正在尝试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");
}
Run Code Online (Sandbox Code Playgroud)
cle*_*tus 694
这应该涵盖你:
String lines[] = string.split("\\r?\\n");
Run Code Online (Sandbox Code Playgroud)
您只需要担心两个新行(UNIX和Windows).
Gum*_*mbo 126
如果你不想要空行:
String.split("[\\r\\n]+")
Run Code Online (Sandbox Code Playgroud)
Psh*_*emo 113
String#split?(String regex)
方法是使用正则表达式(正则表达式).由于Java 8正则表达式支持\R
代表(来自Pattern类的文档):
Linebreak matcher
\R任何Unicode换行序列,相当于\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
所以我们可以用它来匹配:
\u000D\000A
- > \r\n
对 \n
)\t
这是\u0009
)\f
)\r
)如您所见,\r\n
它位于正则表达式的开头,它确保正则表达式首先尝试匹配该对,并且只有当该匹配失败时,它才会尝试匹配单个字符行分隔符.
所以如果你想拆分线上分隔符使用split("\\R")
.
如果你不想从结果数组中删除空字符串,请""
使用split(regex, limit)
负limit
参数之类的split("\\R", -1)
.
如果要将一个或多个连续的空行视为单个分隔符使用split("\\R+")
.
She*_*ari 45
String.split(System.getProperty("line.separator"));
Run Code Online (Sandbox Code Playgroud)
这应该是系统独立的
Mar*_*tin 12
您不必在字符组中双重转义字符.
对于所有非空行使用:
String.split("[\r\n]+")
Run Code Online (Sandbox Code Playgroud)
Ant*_*iuc 10
在java-11中lines
引入了一个新方法,该方法返回String
Stream<String>
返回从由行终止符分区的此字符串中提取的子字符串流.
识别的行终止符是换行符"\n"(U + 000A),回车符"\ r"(U + 000D)和回车后紧跟换行符"\ 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
Run Code Online (Sandbox Code Playgroud)
也许这会奏效:
从split方法的参数中删除双反斜杠:
split = docStr.split("\n");
Run Code Online (Sandbox Code Playgroud)
实际上,这里给出的所有答案都不符合Java对新行的定义,例如BufferedReader#readline。Java正在接受\n
,\r
并将其\r\n
作为新行。一些答案匹配多个空行或格式错误的文件。例如。<sometext>\n\r\n<someothertext>
使用时[\r\n]+
将导致两行。
String lines[] = string.split("(\r\n|\r|\n)", -1);
Run Code Online (Sandbox Code Playgroud)
相反,以上答案具有以下属性:
在JDK11
所述String
类有一个lines()
方法:
返回从此字符串中提取的行流,以行终止符分隔。
此外,文档继续说:
行终止符是以下之一:换行符“ \ n”(U + 000A),回车符“ \ r”(U + 000D)或回车符后紧跟换行符“ \ r \ n“(U + 000D U + 000A)。行要么是零个或多个字符的序列,后跟一个行终止符,要么是一个或多个字符的序列,后跟字符串的结尾。一行不包括行终止符。
有了这个,就可以做到:
Stream<String> stream = str.lines();
Run Code Online (Sandbox Code Playgroud)
然后,如果您想要一个数组:
String[] array = str.lines().toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)
给定此方法后,Stream将为您提供很多选择,因为它使您能够编写可能并行操作的简洁声明式表达式。
为了防止空行被压扁,请使用:
String lines[] = String.split("\\r?\\n", -1);
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因而不想使用String.split
(例如,由于使用正则表达式),并且想要在Java 8或更高版本上使用函数式编程,请执行以下操作:
List<String> lines = new BufferedReader(new StringReader(string))
.lines()
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
小智 5
上面的答案对我在 Android 上没有帮助,感谢Pshemo响应在 Android 上对我有用。我将在这里留下Pshemo 的一些回答:
split("\\\\n")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
483085 次 |
最近记录: |