【问题标题】:How to replace last dot in a string using a regular expression?如何使用正则表达式替换字符串中的最后一个点?
【发布时间】:2010-11-04 05:03:01
【问题描述】:

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

假设我有以下字符串:

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

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

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

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

【问题讨论】:

    标签: java regex string


    【解决方案1】:

    一种方法是:

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

    或者,您可以将负前瞻用作:

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

    Regex in Action

    【讨论】:

    • 非常感谢!我永远不会想出那个怪物。
    • 它是一个怪物(你的话,不是我的话)这一事实可能是 使用它的一个很好的论据 :-) 不过,如果它有效,它应该被接受因为您确实要求提供正则表达式解决方案。
    • 我很贪婪,我赞成 :) 很好地使用贪婪。*
    • 为什么不让第二个量词不情愿,就像^(.*)\\.(.*?)$一样?
    【解决方案2】:

    虽然您可以使用正则表达式,但有时最好退后一步,以老式的方式进行操作。我一直认为,如果你想不出一个正则表达式在大约两分钟内完成,它可能不适合正则表达式解决方案。

    毫无疑问,在这里可以获得一些精彩的正则表达式答案。其中一些甚至可能是可读的:-)

    您可以使用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 !
    

    【讨论】:

    • 是的,我有一个使用 StringBuilder 并根据最后一个点的索引进行替换的解决方案。但是如果可能的话,我想使用正则表达式来完成它,因此这个问题。
    • 仅供参考,我之前使用 StringBuilder 的解决方案如下所示: StringBuilder builder = new StringBuilder(string); builder.replace(lastDotIndex, lastDotIndex + 1, "!"); String newString = builder.toString();
    【解决方案3】:

    您需要的正则表达式是\\.(?=[^.]*$)?= 是一个前瞻断言

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

    【讨论】:

      【解决方案4】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-24
        • 2020-02-28
        • 1970-01-01
        相关资源
        最近更新 更多