按新行分割Javastring

我想分割文本在JTextArea使用正则expression式分割string\n然而,这是行不通的,我也尝试了\r\n|\r|n和其他许多\r\n|\r|nexpression式的组合。 码:

 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.split("[\\r\\n]+") 

split方法是使用正则expression式(正则expression式)。 由于Java 8正则expression式支持代表(来自Pattern类的文档 )的\R

线性匹配器
\ R任何Unicode \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]顺序,相当于\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

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

  • \u000D\000A – > \r\n
  • \ u000A – >换行符( \n
  • \ u >行标签 (不要混淆字符列表\u0009
  • \ u > C – >换页( \f
  • \ u000D – >回车( \r
  • 下一行(NEL)
  • 行分隔符
  • 段落分隔符

正如你看到\r\n放置在正则expression式的开始,它确保正则expression式将尝试首先匹配这 ,并且只有当它失败时,它将尝试匹配单个字符行分隔符。


所以如果你想在分隔线上使用split("\\R")

如果不希望从结果数组尾随空string中删除""使用split("\\R", -1)limit参数split(regex, limit) split("\\R", -1)

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

 String.split(System.getProperty("line.separator")); 

这应该是系统独立的

您不必在字符组中加倍转义字符。

对于所有非空行使用:

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

也许这将工作:

从split方法的参数中删除双反斜杠:

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

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

尝试在最后做textAreaDoc.insertString(int,String,AttributeSet)?

为了保持空线被挤压使用:

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

这里给出的所有答案实际上并不尊重例如BufferedReader#readline中给出的新行的Java定义。 Java正在接受\n\r\r\n作为新的一行。 一些答案匹配多个空行或格式错误的文件。 例如。 当使用[\r\n]+时, <sometext>\n\r\n<someothertext>会导致两行。

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

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

  • 它符合新线的Java定义,例如BufferedReader正在使用它
  • 它不匹配多个新行
  • 它不会删除尾随的空行

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

在所有给定的解决scheme的基础上尝试失败后。 我用一些特殊字词replace\n然后再分开。 对我而言,下面的诀窍是:

 article = "Alice phoned\n bob."; article = article.replace("\\n", " NEWLINE "); String sen [] = article.split(" NEWLINE "); 

我无法复制问题中给出的例子。 但是,我想这个逻辑可以应用。

作为以前答案的替代scheme,如果要对结果行应用其他操作(例如修剪行或筛选空行),则可以使用番石榴的Splitter API:

 import com.google.common.base.Splitter; Iterable<String> split = Splitter.onPattern("\r?\n").trimResults().omitEmptyStrings().split(docStr); 

请注意,结果是一个Iterable而不是一个数组。

  • 试试这个希望对你有帮助

  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"); 
 package in.javadomain; public class JavaSplit { public static void main(String[] args) { String input = "chennai\nvellore\ncoimbatore\nbangalore\narcot"; System.out.println("Before split:\n"); System.out.println(input); String[] inputSplitNewLine = input.split("\\n"); System.out.println("\n After split:\n"); for(int i=0; i<inputSplitNewLine.length; i++){ System.out.println(inputSplitNewLine[i]); } } }