Java等效于C#StringSplitOptions.RemoveEmptyEntries和Java StringTokenizer(input2,“ {},()\ t”) - c#

作为Java新手,我正在努力String.split。尝试标记以下字符串

"(3,3,{S,W,P},{P,W,P},{P,P,P}),(1,2,{S,E}),(2,1,{{S},{E}})"

使用String.split的正则表达式模式"\\{|\\(|\\}|\\)|\\s|,"

不幸的是,它还会在发生匹配的地方返回空字符串,类似于StringSplitOptions.RemoveEmptyEntries在C#中我想抑制它。

相反,使用StringTokenizer效果很好,但是不建议使用,我正尝试避免使用它。为了使我的问题更清楚,我尝试使用String.split进行等效操作,就像使用以下Tokenizer一样

new StringTokenizer(input2, "{},() \t")

请提出建议,我应该如何进行。

参考方案

首先,您可以使用字符类而不是交替字符来消除大多数反斜杠。然后,如Christopher所说,您可以添加+来模仿StringTokenizer匹配一个或多个定界符的行为:

"[{},()\\s]+"

不幸的是,当字符串以分隔符开头时,无法阻止第一个空令牌。尾随的空令牌会自动删除,但是您必须自己过滤掉前导令牌。

当然,您可以自由使用StringTokenizer,也可以使用第三方工具(例如Guava的Splitter)。