如何从java中的字符串中删除这些子串?

时间:2012-02-24 12:01:33

标签: java regex string pattern-matching

我有一个形式为“a_x,b_y,c_z”的java字符串。

我想在_之前和, .

之后摆脱大块

所以我需要得到x,y,z。

我怎样才能做到这一点?
我正在努力使String.replaceAll(",*_",",")工作但却收到错误:

线程“main”中的异常java.util.regex.PatternSyntaxException:在索引0附近悬挂元字符'*'

请帮忙。

3 个答案:

答案 0 :(得分:4)

这对我有用:

String b = a.replaceAll("[\\w]_", "");

这取决于你需要替换的内容,我只考虑类\ w中的字符,但你可以调整这部分以匹配你喜欢的任何内容。

答案 1 :(得分:2)

*表示0或更多次出现,并且本身并不意味着什么,这是一个错误。你必须指定你想要的0或更多次出现:

"a_x,b_y,c_z".replaceAll(",.*_", ",")

给出:

a_x,y,z

或更好:

"a_x,b_y,c_z".replaceAll(",[^_]*_", ",")

其中[^_]表示任何不是_的字符。

答案 2 :(得分:0)

String input = "a_x,b_y,c_z";
for (String split : input.split(","))
{
  String output = split.split("_")[1];
  System.out.println(output);
}

变量output会在循环的每次迭代中发生变化(从xy再到z)。