2

运行后

Names.replaceAll("^(\\w)\\w+", "$1.")

我有一个字符串

Names = F.DA, ABC, EFG

我想要一个像这样的字符串格式

F.DA, A.BC & E.FG

我怎么做 ?

更新 :

如果我有一个名字喜欢

Robert Filip, Robert Morris, Cirstian Jed

我想要喜欢

R.Filp, R.Morris & C.Jed

我会很高兴,如果你也给我推荐一个关于 JAVA Regex 的好资源。

4

3 回答 3

6

您需要将结果重新分配回Names,因为字符串是不可变的,这些replaceAll方法不会进行就地替换,而是返回一个新的字符串:

names = names.replaceAll(", (?=[^,]*$)", " & ")
于 2013-08-06T10:08:20.947 回答
2

以下应该为您工作:

 String names = "Robert Filip, Robert Morris, Cirstian Jed, S.Smith";
 String repl  = names.replaceAll("((?:^|[^A-Z.])[A-Z])[a-z]*\\s(?=[A-Z])", "$1.")
                     .replaceAll(", (?=[^,]*$)", " & ");

 System.out.println(repl); //=> R.Filip, R.Morris, C.Jed & S.Smith

解释:

  1. 第一次replaceAll调用匹配非单词 && 非点字符 + 第 1 组中的大写字母 + 0 个或多个小写字母 + 后跟 1 个大写字母的空格。然后在比赛前插入一个点$1.
  2. 2nsreplaceAll调用匹配一个逗号,该逗号后面没有另一个逗号,并将其替换为文字字符串" & "
于 2013-08-06T10:45:14.243 回答
0

试试这个

    String names = "Amal.PM , Rakesh.KR , Ajith.N";
    names = names.replaceAll(" , (?=[^,]*$)", " & ");
    System.out.println("New String : "+names);
于 2013-08-06T10:32:50.540 回答