开发者

How to replace last dot in a string using a regular expression?

I'm trying to replace the last dot in a String using a regular expression.

Let's say I have the following String:

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

I want to replace the last dot with an exclamation mark such that the result is:

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

I have tried various expressions using the method Str开发者_开发技巧ing.replaceAll(String, String) without any luck.


One way would be:

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

Alternatively you can use negative lookahead as:

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

Regex in Action


Although you can use a regex, it's sometimes best to step back and just do it the old-fashioned way. I've always been of the belief that, if you can't think of a regex to do it in about two minutes, it's probably not suited to a regex solution.

No doubt get some wonderful regex answers here. Some of them may even be readable :-)

You can use lastIndexOf to get the last occurrence and substring to build a new string: This complete program shows how:

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 ."));
    }
}

The output is:

hello.world.how.are!you!
no dots in here
! first
last !


The regex you need is \\.(?=[^.]*$). the ?= is a lookahead assertion

"hello.world.how.are.you!".replace("\\.(?=[^.]*$)", "!")


Try this:

string = string.replaceAll("[.]$", "");
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜