我有一串逗号分隔的单词,例如"a, b, c"
。
我需要用“和”替换最后一个逗号实例,使其看起来像"a, b and c"
。
我尝试过像这样使用replaceFirst:
"a, b, c".replaceFirst("(,)[^,]+$", " and")
但它不起作用。它用“和”替换最后一个逗号之后的所有内容,而不仅仅是生成"a, b and"
的逗号。
如何使它工作?
我在java8上。
聚苯乙烯。我认为这很明显,但似乎我需要澄清一下,我正在寻找一个适用于任意数量的逗号分隔标记的通用解决方案,即'a,b,....,c'
答案 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)
我认为replaceFirst
比replaceAll
更好,因为您只想替换一次而不是全部,并且运行速度比replaceAll
快。< / p>
使用${number}
捕获群组。
"a, b, c".replaceFirst(",([^,]+)$", " and$1"); // return "a, b and c"
使用积极前瞻:
"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