2012-02-24 93 views
2

我有一個形式爲「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

回答

4

這個工作對我來說:

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

2

*意味着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

0
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

相關問題