2012-10-10 39 views
4

在Java中我想一個字符串後插入空格逗號後插入的空間,但只有在逗號後的字符是由數字或字母成功。我希望使用正則表達式作爲參數的replaceAll方法。到目前爲止,我有以下幾點:正則表達式 - 只有當成功由字母或數字

String s1="428.0,chf"; 
s1 = s1.replaceAll(",(\\d|\\w)",", "); 

此代碼成功上方String和一個在那裏已經有逗號後的空間區分。我的問題是,我不知道如何編寫表達式,以便插入空間。上面的代碼將用空格替換上面顯示的String中的c。這不是我想要的。

s1應該是這樣執行replaceAll後:"428.0 chf"

回答

2

試試這個,並注意$1指的是你的匹配分組:

s1.replaceAll(",(\\d|\\w)"," $1"); 

注意String.replaceAll()作品以同樣的方式作爲Matcher.replaceAll() 。從the doc

替換字符串可能包含捕獲子序列

4
s1.replaceAll(",(?=[\da-zA-Z])"," "); 

(?=[\da-zA-Z])引用是positive lookahead這將尋找一個數字或單詞後,。這種超前不會因爲更換這是從來沒有列入result.It的只是一個檢查

注:

\w包括數字,字母和_。所以沒有必要的\d

一種更好的方式來表示這將是[\da-zA-Z]而不是\w因爲\w還包括_,你不需要2比賽

+0

尼斯。在答案的解釋是好的,但 –

+0

@BrianAgnew加入explanation..thxx .. – Anirudha

2
String s1="428.0,chf"; 
s1 = s1.replaceAll(",([^_]\\w)"," $1"); //Match alphanumeric except '_' after ',' 
System.out.println(s1); 

輸出: -

428.0 chf 

由於\w比賽digitswords,underscore,所以,[^_]否定S中underscore\w ..

$1代表捕獲組..你用_$1,後拍攝c在這裏,所以更換c - >_c。 「_」 表示一個空格..

+0

這不正是他想要的,我不這麼認爲。注意逗號 –

+0

@BrianAgnew ..謝謝:) ..其實OP的內容和標題不匹配。所以我第一次弄錯了。編輯代碼.. –

+0

'\ d'包含'\ d'..no需要'\ d'然後..知道'_'雖然 – Anirudha

0

嘗試這....

public class Tes { 

    public static void main(String[] args){ 

     String s1="428.0,chf"; 

     String[] sArr = s1.split(","); 

     String finalStr = new String(); 

     for(String s : sArr){ 

      finalStr = finalStr +" "+ s; 
     } 

     System.out.println(finalStr); 

    } 

} 
+0

@KumarVivekMitra。 。這不檢查下一個字符是否是字母或數字的條件。 –

+0

@KumarVivekMitra ..在捆綁完整的downvotes之前刪除它.. –