在Java中解析具有多个分隔符的字符串

在Java中解析具有多个分隔符的字符串,java,arrays,string,delimiter,Java,Arrays,String,Delimiter,我试图将字符串加载到数组中,删除所有空格和标点符号。问题是,如果一行中有两个分隔符,它会在数组中留下一个空白 我所拥有的: String[] temparray =inputstr.split("\\s+|,|;|\\(|\\)|, "); 例如: inputstr = "I bought bread, eggs, and milk" 其输出为: I bought bread eggs and milk 有人知道如何防止逗号后的空格被加载到数组中吗?您可以使用a对所有分隔符进行分组 S

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

我所拥有的:

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

inputstr = "I bought bread, eggs, and milk"
其输出为:

I
bought
bread

eggs

and
milk
有人知道如何防止逗号后的空格被加载到数组中吗?

您可以使用a对所有分隔符进行分组

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

通过使用
元字符表示“可选”,可以将“逗号”和“逗号后跟空格”这两种情况组合起来

我已将
替换为
,?
(逗号空格问号)。这样,空格将作为分隔符的一部分进行匹配

//                           space here ---v
String[] temparray = inputstr.split("\\s+|, ?|;|\\(|\\));
打印阵列的每个元素:

I
bought
bread
eggs
and
milk

请您解释一下。@mok The
[]
创建了一个字符类,由空格字符、逗号、分号和左右括号组成。将该类传递给
split()
方法将导致该类在这些字符中的任何一个上拆分。字符类后面的
+
表示
1个或多个
,因此
split()
将在一个或多个字符上拆分。它将拆分为一个
,或者后面跟一个空格,如
。它还将拆分为两个连续的逗号,或
,;()
,等等。@mok表示它将使用一个或多个这些字符的序列作为分隔符。这意味着如果字符串是
“我买了面包、鸡蛋、;;和牛奶”
,它将返回长度为6的数组
{“我”、“买了”、“面包”、“鸡蛋”、“和牛奶”}