2014-04-08 96 views
1

我试图将一个字符串加载到数组中,删除所有的空格和标点符号。问题是,如果我在一行中有两个分隔符,它会在数组中留下空白。用Java中的多个分隔符解析字符串

我有什么:

String[] temparray =inputstr.split("\\s+|,|;|\\(|\\)|, "); 

例子:

inputstr = "I bought bread, eggs, and milk" 

它的输出:

I 
bought 
bread 

eggs 

and 
milk 

任何人都知道如何保持逗号后的空间被加载到阵列?

回答

2

你可以使用一个character class将所有的分隔符

String[] temparray = inputstr.split("[\\s,;()]+"); 
+0

请您进一步解释。 – mok

+1

@mok'[]'创建一个由空白字符,逗号,分号和左右括号组成的字符类。将该类传递给split()方法将导致它在任何这些字符上分裂。字符类后面的'+'表示'1或更多',所以'split()'将会分割成一个或多个字符。它会分割成一个','或者一个,然后是'','后面的空格。它也将分裂连续两个逗号,或',; ()'等 –

+1

@mok这意味着它将使用这些字符的一个或多个_序列作为分隔符。这意味着如果你的字符串是''我买了面包,鸡蛋,,,和牛奶'',它会返回一个长度为6的数组{“我”,“买”,“面包”,“鸡蛋” “和”,“牛奶”}'。 – ajb

1

您可以通过使用?元字符,表示“可选”两案合并为“逗号”和“逗号后面的空间”。

我已将,替换为, ?(逗号空格问号)。这样空间就被匹配成分隔符的一部分。

//       space here ---v 
String[] temparray = inputstr.split("\\s+|, ?|;|\\(|\\)); 

打印阵列中的每个元素:

I 
bought 
bread 
eggs 
and 
milk