Java相当于C#`StringSplitOptions.RemoveEmptyEntries`和Java`StringTokenizer(input2,“{},()\ t”)`

时间:2012-05-05 22:52:58

标签: c# java regex split stringtokenizer

作为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")

请建议,我该怎么办。

3 个答案:

答案 0 :(得分:2)

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

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

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

当然,如果需要,您可以自由使用StringTokenizer,也可以使用像Guava Splitter这样的第三方工具。

答案 1 :(得分:0)

尝试使用此正则表达式:

(\\{|\\(|\\}|\\)|\\s|,)+

当然:StringTokenizer不会被弃用https://stackoverflow.com/a/6983926/278842

答案 2 :(得分:0)

尝试使用commons-lang包,并查找StrTokenizer类。它将根据分隔符为您处理字符串拆分,并具有如何处理空值的选项(返回null或忽略)。