【问题标题】:Replace the last part of a string替换字符串的最后一部分
【发布时间】:2010-12-12 05:09:41
【问题描述】:

我想用) 替换最后一个字符串,

假设字符串是:

插入对偶(姓名、日期、

要转换成:

插入对偶(姓名、日期)

【问题讨论】:

  • 您是否考虑过重写循环以显示正确数量的逗号?我已经看到了一个 Stackoverflow 问题,可以让该循环尽可能高效。
  • 简单使用:"插入对偶(name,date,".replaceAll(",(?!.*,)",")");

标签: java regex string replace


【解决方案1】:

以下代码应将最后出现的 ',' 替换为 ')'

StringBuilder b = new StringBuilder(yourString);
b.replace(yourString.lastIndexOf(","), yourString.lastIndexOf(",") + 1, ")" );
yourString = b.toString();

注意如果String 不包含',',这将引发异常。

【讨论】:

  • 我认为他将其标记为 java,stringbuilder 不是 dotnet 吗?
  • 两种语言都有 StringBuilder
  • 10x,不知道。我认为您的解决方案将替换任何 last ,而不仅仅是在字符串末尾。
  • Dani:Java 中的 StringBuilder 是 StringBuffer 的非线程安全变体,这使得它明显更快(如果我没记错的话,大约 20-30%),如果线程安全 StringBuffer 不是t 明确需要。
  • 嘿...那是病态。起初我以为那是 C#。唯一的区别是方法的大小写,真的。
【解决方案2】:

检查字符串的长度,检查最后一个字符(如果你有长度很容易),并在必要时替换它。

此解决方案不是特定于语言的 - 只需使用常识即可。

【讨论】:

  • 它不是最后一个字符,它是特定字符的最后一次出现。
  • 嗯,这个问题并不清楚。 “最后一串……”我想知道他的意思……
  • 没错,这就是为什么我选择了在这两种情况下都有效的方法。
【解决方案3】:
str = str.substring(0, str.lastIndexOf(",")) + ")";

【讨论】:

  • 那会改变最后一个",",不分青红皂白是否是String中的最后一个字符。
  • 它可以在任何 ',' 所在的地方工作 - 但它会忽略最后一个 ',' 之后的任何内容。
  • 如果lastIndexOf返回-1substring会抛出异常。
【解决方案4】:

你可以使用正则表达式:

String aResult = "Insert into dual (name,date,".replaceAll(",$", ")");

replaceAll(...) 将匹配字符串与给定的正则表达式(参数 1)(在这种情况下,如果它是逗号,我们匹配最后一个字符)。然后用替换(参数2)替换它(在这种情况下是')')。

另外!如果您想确保注意尾随空格和制表符,您只需将正则表达式更改为“,\[ \t\]*$”。注意:'\[' 和 '\]' 没有反斜杠(我不知道如何正确转义)。

【讨论】:

  • 如果你使用 replaceAll(",$", ")") 作为 replaceAll("[,]*$", ")") ,它会工作,虽然它有几个逗号。例如; " (name, date,,," --> " (name, date)"。我觉得这样比较灵活。
【解决方案5】:

更易读的方式...您可以使用它来了解 String 及其功能

String myString = "Insert into dual (name,date,";
String newString = "";
int length = myString.length();
String lastChar = myString.substring(length-1);

if (lastChar.contains(",")) {
    newString = myString.substring(0,length-1) + ")";
}

System.out.println(newString);

【讨论】:

    【解决方案6】:

    这是一种仅替换给定字符串的最后一个子字符串的自定义方法。这对你很有用:

    private String replaceLast(String string, String from, String to) {
        int lastIndex = string.lastIndexOf(from);
        if (lastIndex < 0)
            return string;
        String tail = string.substring(lastIndex).replaceFirst(from, to);
        return string.substring(0, lastIndex) + tail;
    }
    

    【讨论】:

      【解决方案7】:

      试试这个正则表达式(^.+)b(.+$)

      示例(替换最后一个 b 字符)

      System.out.println("1abchhhabcjjjabc".replaceFirst("(^.+)b(.+$)", "$1$2"));
      

      【讨论】:

        【解决方案8】:

        如果您可以执行以下操作,那么麻烦是什么?

        word = (String) word.subSequence(0, word.length() -1);
        

        这会返回一个没有字符串最后一部分的新字符串。

        【讨论】:

          【解决方案9】:

          将字符串的最后一个字符替换为)

          str = str.substring(0, str.length()-1)+")";
          

          确保您的字符串不为空或 null。

          【讨论】:

            【解决方案10】:

            在类似的搜索中,我找到了这个答案:

            Replace Last Occurrence of a character in a string

            我认为它是最好的,因为它按预期使用 Java 方法,而不是试图重新发明轮子。

            它本质上是向后读取字符串并使用 String 对象的 replaceFirst 方法,这正是我想要的。

            这里是关于 replaceFirst String 方法和 StringBuffer 的反向函数的文档:

            replaceFirst

            reverse

            这是我实现它的方法,以简单地从我想要解释的代码 sn-p 中删除一些 HTML 'pre' 标签。记住也要反转你的搜索字符串,然后再反转一切恢复正常。

            private String stripHtmlPreTagsFromCodeSnippet(String snippet) {
                String halfCleanSnippet = snippet.replaceFirst("<pre>", "");
                String reverseSnippet = new StringBuffer(halfCleanSnippet).reverse().toString();
                String reverseSearch = new StringBuffer("</pre>").reverse().toString();
                String reverseCleanSnippet = reverseSnippet.replaceFirst(reverseSearch, "");
                return new StringBuffer(reverseCleanSnippet).reverse().toString();
            }
            

            【讨论】:

              【解决方案11】:

              使用Apache Commons'StringUtils函数removeEnd()

              StringUtils.removeEnd("www.domain.com", ".com")   = "www.domain"
              

              【讨论】:

                猜你喜欢
                • 2022-07-18
                • 1970-01-01
                • 2012-05-18
                • 2017-09-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-02-24
                • 2012-07-17
                相关资源
                最近更新 更多