4

在Java中,我想在字符串之后插入一个空格,但前提是逗号后面的字符后面是数字或字母。我希望使用使用正则表达式作为参数的 replaceAll 方法。到目前为止,我有以下内容:

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

此代码确实成功区分了上面的字符串和逗号后已经有空格的字符串。我的问题是我不知道如何编写表达式以便插入空格。上面的代码将上面显示的字符串中的 c 替换为空格。这不是我想要的。

s1执行后应该是这样的replaceAll"428.0 chf"

4

4 回答 4

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

(?=[\da-zA-Z])是一个positive lookahead将在 . 之后查找数字或单词,。此先行不会被替换,因为它从未包含在结果中。这只是一个检查

笔记

\w包括数字、字母和一个_。所以不需要\d

一个更好的表示它的方法是,[\da-zA-Z]而不是\w因为\w还包括_你不需要的 2 匹配

于 2012-10-10T17:01:38.930 回答
2

试试这个,并注意是$1指您匹配的分组:

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

请注意,它String.replaceAll()的工作方式与Matcher.replaceAll(). 从文档

替换字符串可能包含对捕获的子序列的引用

于 2012-10-10T17:01:06.670 回答
2
String s1="428.0,chf";
s1 = s1.replaceAll(",([^_]\\w)"," $1"); //Match alphanumeric except '_' after ','
System.out.println(s1);

输出: -

428.0 chf

由于\w匹配digits, words,and an underscore, So[^_]否定underscorefrom \w..

$1代表捕获的组..您c,此处之后捕获,因此替换c_$1-> _c.. “_”代表一个空格..

于 2012-10-10T17:02:44.030 回答
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);

    }

}
于 2012-10-10T17:08:16.527 回答