[英]How to replace last dot in a string using a regular expression?
我正在尝试使用正则表达式替换字符串中的最后一个点。
假设我有以下字符串:
String string = "hello.world.how.are.you!";
我想用感叹号替换最后一个点,使结果为:
"hello.world.how.are!you!"
我已经尝试过使用String.replaceAll(String, String)
方法的各种表达式String.replaceAll(String, String)
没有任何运气。
一种方法是:
string = string.replaceAll("^(.*)\\.(.*)$","$1!$2");
或者,您可以使用负前瞻方式:
string = string.replaceAll("\\.(?!.*\\.)","!");
尽管可以使用正则表达式,但有时最好退后一步,以老式的方式进行。 我一直坚信,如果您不能在大约两分钟内想到一个正则表达式,那可能不适合正则表达式解决方案。
毫无疑问,这里有一些很棒的正则表达式答案。 其中一些甚至是可读的:-)
您可以使用lastIndexOf
来获取最后一次出现的信息,并可以使用substring
来构建新的字符串:该完整程序演示了如何:
public class testprog {
public static String morph (String s) {
int pos = s.lastIndexOf(".");
if (pos >= 0)
return s.substring(0,pos) + "!" + s.substring(pos+1);
return s;
}
public static void main(String args[]) {
System.out.println (morph("hello.world.how.are.you!"));
System.out.println (morph("no dots in here"));
System.out.println (morph(". first"));
System.out.println (morph("last ."));
}
}
输出为:
hello.world.how.are!you!
no dots in here
! first
last !
您需要的正则表达式是\\\\.(?=[^.]*$)
。 ?=
是一个前瞻性断言
"hello.world.how.are.you!".replace("\\.(?=[^.]*$)", "!")
尝试这个:
string = string.replaceAll("[.]$", "");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.