2017-01-22 111 views
0

我想找到存储句子中可能为空格,换行符的单词之间的所有分隔符。拆分字符串以获取单词分隔符

说我有以下字符串:

String text = "hello, darkness my old friend.\nI've come to you again\r\nasd\n 123123"; 

String[] separators = text.split("\\S+"); 

输出:[, , , , , , , , , , , ]

所以我就拆什么,但它是在第一返回空分隔的空间,其余的都不错。为什么首先空串?

另外,我想分割句点和逗号。但我不知道如何去做这个意思".\n"是一个分隔符。

通缉输出为上面的字符串:

separators = {", ", " ", " ", " ", ".\n", " ", " ", " ", " ", "\r\n", "\n "} 

separators = {",", " ", " ", " ", " ", ".", "\n", " ", " ", " ", " ", "\r\n", "\n "} 
+0

对于点和换行符,您需要将它们转义,例如'\\。'和'\\ n' –

+0

您可以尝试使用[StringTokenizer](https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html)。 –

+0

[Java String.split()有时会给出空白字符串]的可能的重复](http://stackoverflow.com/questions/18870699/java-string-split-sometimes-giving-blank-strings)。只是为了你的第一个问题,但是你去了,这是一个完美的理由,一次只问一个问题。 – usr2564301

回答

0

试试这个:

String[] separators = text.split("[\\w']+"); 

这将非分隔符定义为“字符”和/或撇号。

这并留下一个领先的空白结果数组,这是无法避免,除非首先除去最主要的字:

String[] separators = text.replaceAll("^[\\w']+", "").split("[\\w']+"); 

也可以考虑添加的连字符的字符类,如果你考虑用连字(前例中的例子)作为一个词,即

String[] separators = text.split("[\\w'-]+"); 

请参阅live demo

0

我想这也可以正常工作:

String[] separators = text.split("\\w+");

+0

它很好,但它返回'''/: – user640853

0

如果觉得它更容易使用的.find()方法来获得期望的结果:

String text = "hello, darkness my old friend.\nI've come to you again\r\nasd\n 123123"; 

String pat = "[\\s,.]+"; // add all that you need to the character class 
Matcher m = Pattern.compile(pat).matcher(text); 

List<String> list = new ArrayList<String>(); 

while(m.find()) { 
    list.add(m.group()); 
} 

// the result is already stored in "list" but if you 
// absolutely want to store the result in an array, just do: 

String[] result = list.toArray(new String[0]); 

这样你可以避免在一开始空字符串问题。

相关问题