如何使用正则表达式替换字符串中的最后一个点?

时间:2010-11-04 05:03:01

标签: java regex string

我正在尝试使用正则表达式替换String中的最后一个点。

假设我有以下字符串:

String string = "hello.world.how.are.you!";

我想用感叹号替换最后一个点,结果是:

"hello.world.how.are!you!"

我尝试了使用方法String.replaceAll(String, String)的各种表达式而没有任何运气。

4 个答案:

答案 0 :(得分:13)

一种方法是:

string = string.replaceAll("^(.*)\\.(.*)$","$1!$2");

或者,您可以使用否定前瞻:

string = string.replaceAll("\\.(?!.*\\.)","!");

Regex in Action

答案 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("[.]$", "");