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

问题描述:

我有一个形式为“a_x,b_y,c_z”的java字符串。如何从java中的字符串中删除这些子字符串?

我想摆脱大块的_前后,.

所以我需要得到X,Y,Z。

我该如何做到这一点?
我试图让String.replaceAll(",*_",",")工作,但得到的错误:在线程“主要” java.util.regex.PatternSyntaxException

例外:党岭元字符“*”指标接近0

请帮助。

+0

了解正则表达式的工作原理。 ',* _'不是有效的正则表达式。请参阅java.util.regex.Pattern的API文档。 – Jesper 2012-02-24 12:04:52

+1

'String.replaceAll(“._”,“”);' – bdares 2012-02-24 12:05:28

这个工作对我来说:

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

这取决于你需要更换,我正在考虑在类\ W只是文字的东西,但你可以调整这部分匹配任何你喜欢的。

+0

是的,这很容易。我认为这是@ p2pnode所需要的。 – 2012-02-24 12:13:19

+0

ab_xx,bc_yy发出axx,byy。失去了前面的角色_ – xyz 2012-02-24 12:16:06

+1

就像我说的...调整它。我的表达式匹配\ w类中属于下划线之前的任何一个字符。如果你需要一个或多个,你会重写该规则为“[\\ w] + _”,如果你需要0或更多,使用*而不是+。 – pcalcao 2012-02-24 12:19:37

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

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

给出:

a_x,y,z 

或更好:

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

其中[^_]指不_任何字符。

+0

“a_x,b_y,c_z”.replaceAll(“,[^ _] * _”,“,”)起作用且整齐。但如何摆脱第一个_以及? – xyz 2012-02-24 12:13:25

+0

“a_x,b_y,c_z”.replaceAll(“,[^ _] * _”,“,”)。replaceAll(“^ [^ _] * _”,“”) – 2012-02-24 12:23:41

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

为循环(从xyz)的每次迭代的可变output变化。

+1

此处的输出为“x \ ny \ nz“(其中\ n是一个新行)。对于循环的每一次迭代(从“x”到“y”到“z”),变量'output'都会改变。 – Hedja 2012-02-24 13:13:04

+0

你说得对,我改变了。 – ZehnVon12 2012-02-24 14:53:01