将逗号的最后一个实例替换为字符串中的“和”

时间:2017-04-06 06:16:53

标签: java java-8

我有一串逗号分隔的单词,例如"a, b, c"
我需要用“和”替换最后一个逗号实例,使其看起来像"a, b and c"

我尝试过像这样使用replaceFirst:

"a, b, c".replaceFirst("(,)[^,]+$", " and")

但它不起作用。它用“和”替换最后一个逗号之后的所有内容,而不仅仅是生成"a, b and"的逗号。

如何使它工作?
我在java8上。

聚苯乙烯。我认为这很明显,但似乎我需要澄清一下,我正在寻找一个适用于任意数量的逗号分隔标记的通用解决方案,即'a,b,....,c'

3 个答案:

答案 0 :(得分:10)

我认为您不需要Java 8中的任何特定内容。如果您想使用String#replaceAll()进行正则表达式路由,则可以考虑使用以下模式:

(.*), (.*)

使用第一个和第二个捕获组简单地重建字符串,它们之间有and。第一个模式(.*)将贪婪地使用所有直到最后一个逗号,这正是您想要的行为。然后,第二个(.*)进行清理以捕获最后的字母/字符串。

String input = "a, b, c";
input = input.replaceAll("(.*), (.*)", "$1 and $2");
System.out.println(input);

<强>输出:

a, b and c

答案 1 :(得分:7)

我认为replaceFirstreplaceAll更好,因为您只想替换一次而不是全部,并且运行速度比replaceAll快。< / p>

  1. 使用${number}捕获群组。

    "a, b, c".replaceFirst(",([^,]+)$", " and$1"); // return "a, b and c"
    
  2. 使用积极前瞻:

    "a, b, c".replaceFirst(",(?=[^,]+$)", " and"); // return "a, b and c"
    

答案 2 :(得分:1)

您也可以使用lastIndexOf实现相同的目标:

String str = "a, b, c";
StringBuilder builder = new StringBuilder(str);
int lastindex = str.lastIndexOf(",");
builder.replace(lastindex, lastindex + 1, " and" );
System.out.println(builder.toString());

输出:

a, b and c