2012-10-10 41 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之前删除它.. –