简体   繁体   中英

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 String.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("\\.(?=[^.]*$)", "!")

尝试这个:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM