我正在尝试使用正则表达式替换String中的最后一个点。
假设我有以下字符串:
String string = "hello.world.how.are.you!";
我想用感叹号替换最后一个点,结果是:
"hello.world.how.are!you!"
我尝试了使用方法String.replaceAll(String, String)
的各种表达式而没有任何运气。
答案 0 :(得分:13)
一种方法是:
string = string.replaceAll("^(.*)\\.(.*)$","$1!$2");
或者,您可以使用否定前瞻:
string = string.replaceAll("\\.(?!.*\\.)","!");
答案 1 :(得分:8)
虽然你可以使用正则表达式,但有时最好退后一步,只是采用老式的方式。我一直相信,如果你想不到一个正则表达式在大约两分钟内完成它,它可能不适合正则表达式解决方案。
毫无疑问,这里有一些很棒的正则表达式答案。其中一些甚至可以读取: - )
您可以使用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 !
答案 2 :(得分:7)
你需要的正则表达式是\\.(?=[^.]*$)
。 ?=
是一个先行断言
"hello.world.how.are.you!".replace("\\.(?=[^.]*$)", "!")
答案 3 :(得分:1)
试试这个:
string = string.replaceAll("[.]$", "");