Как заменить последнюю точку в строке с помощью регулярного выражения? - PullRequest
7 голосов
/ 04 ноября 2010

Я пытаюсь заменить последнюю точку в строке с помощью регулярного выражения.

Допустим, у меня есть следующая строка:

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

Я хочу заменить последнюю точкус восклицательным знаком, таким что результат:

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

Я пробовал различные выражения, используя метод String.replaceAll(String, String) без какой-либо удачи.

Ответы [ 4 ]

13 голосов
/ 04 ноября 2010

Один из способов будет:

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

В качестве альтернативы вы можете использовать отрицательный прогноз в виде:

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

Regex в действии

8 голосов
/ 04 ноября 2010

Хотя вы можете использовать регулярные выражения, иногда лучше отступить назад и просто сделать это старомодным способом. Я всегда верил, что если вы не можете придумать регулярное выражение, чтобы сделать это примерно через две минуты, это, вероятно, не подходит для решения регулярных выражений.

Без сомнения, получите замечательные ответы на регулярные выражения здесь. Некоторые из них могут даже быть читаемыми: -)

Вы можете использовать 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 !
7 голосов
/ 04 ноября 2010

Необходимое регулярное выражение \\.(?=[^.]*$). ?= является предварительным утверждением

"hello.world.how.are.you!".replace("\\.(?=[^.]*$)", "!")
1 голос
/ 21 апреля 2015

Попробуйте это:

string = string.replaceAll("[.]$", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...