按新行分割Javastring
我想分割文本在JTextArea
使用正则expression式分割string\n
然而,这是行不通的,我也尝试了\r\n|\r|n
和其他许多\r\n|\r|n
expression式的组合。 码:
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]); } } }