0

作为一名 Java 新手,我正在努力解决String.split. 试图标记以下字符串

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

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

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

相反,使用StringTokenizer效果很好,但被弃用我试图避免它。为了让我的问题更清楚,我正在尝试与String.split使用以下 Tokenizer的等效行为

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

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

4

3 回答 3

2

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

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

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

当然,如果你愿意,你可以随意使用 StringTokenizer,或者像 Guava's Splitter这样的第三方工具。

于 2012-05-06T00:56:23.960 回答
0

Try the commons-lang package, and look for StrTokenizer class. It will handle string splitting for you based on a delimiter and has an option for what to do with empty values (return as null, or ignore).

于 2012-05-06T00:25:15.463 回答
0

试试这个正则表达式:

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

当然:不推荐使用 StringTokenizer https://stackoverflow.com/a/6983926/278842

于 2012-05-05T22:59:28.620 回答