我试图在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");
}
遗憾的是,Java缺少一种既简单又有效的方法来用固定的字符串分割字符串。String::split和stream API都很复杂,而且相对较慢。此外,它们可以产生不同的结果。
split检查它的输入,然后每次都编译为java.util.regex.Pattern(除非输入只包含一个安全的字符)。
然而,一旦它被编译,Pattern是非常快的。所以最好的解决方案是预编译模式:
private static final Pattern LINE_SEP_PATTERN = Pattern.compile("\\R");
然后这样使用它:
String[] lines = LINE_SEP_PATTERN.split(input);
从Java 8开始,\R匹配Unicode指定的任何换行符。在Java 8之前,你可以使用这样的代码:
Pattern.compile(Pattern.quote(System.lineSeparator()))
遗憾的是,Java缺少一种既简单又有效的方法来用固定的字符串分割字符串。String::split和stream API都很复杂,而且相对较慢。此外,它们可以产生不同的结果。
split检查它的输入,然后每次都编译为java.util.regex.Pattern(除非输入只包含一个安全的字符)。
然而,一旦它被编译,Pattern是非常快的。所以最好的解决方案是预编译模式:
private static final Pattern LINE_SEP_PATTERN = Pattern.compile("\\R");
然后这样使用它:
String[] lines = LINE_SEP_PATTERN.split(input);
从Java 8开始,\R匹配Unicode指定的任何换行符。在Java 8之前,你可以使用这样的代码:
Pattern.compile(Pattern.quote(System.lineSeparator()))