作为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")
请建议,我该怎么办。
答案 0 :(得分:2)
首先,您可以使用字符类而不是替换来消除大部分反斜杠。然后,正如Christopher所说,您可以添加+
来模仿StringTokenizer匹配一个或多个分隔符字符的行为:
"[{},()\\s]+"
不幸的是,当字符串以分隔符开头时,无法阻止第一个空标记。 尾随空标记会自动删除,但您必须自行过滤掉前导标记。
当然,如果需要,您可以自由使用StringTokenizer,也可以使用像Guava Splitter这样的第三方工具。
答案 1 :(得分:0)
尝试使用此正则表达式:
(\\{|\\(|\\}|\\)|\\s|,)+
当然:StringTokenizer不会被弃用https://stackoverflow.com/a/6983926/278842
答案 2 :(得分:0)
尝试使用commons-lang包,并查找StrTokenizer类。它将根据分隔符为您处理字符串拆分,并具有如何处理空值的选项(返回null或忽略)。