替换字符串的最后一部分

Har*_*ish 42 java regex string replace

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

假设字符串是:

插入双(姓名,日期,

转换为:

插入双(姓名,日期)

jjn*_*guy 72

以下代码应该用a替换最后一次出现的','a ')'.

StringBuilder b = new StringBuilder(yourString);
b.replace(yourString.lastIndexOf(","), yourString.lastIndexOf(",") + 1, ")" );
yourString = b.toString();
Run Code Online (Sandbox Code Playgroud)

注意 如果String不包含异常,则抛出异常','.

  • 两种语言都有StringBuilder (9认同)
  • Dani:Java 中的 StringBuilder 是 StringBuffer 的非线程安全变体,这使得它的速度明显更快(如果我没记错的话,大约是 20-30%),并且如果没有明确需要线程安全 StringBuffer,则应该首选。 (2认同)

Naw*_*Man 37

您可以使用正则表达式:

String aResult = "Insert into dual (name,date,".replaceAll(",$", ")");
Run Code Online (Sandbox Code Playgroud)

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

加!如果要确保使用拖尾空格和制表符,可以将正则表达式更改为" ,\[ \t\]*$".注意' \['和' \]'没有反斜杠(我不知道如何正确地逃避它).

希望这可以帮助.

  • 如果你使用replaceAll(",$",")"作为replaceAll("[,]*$",")"),它会有效,虽然它有几个逗号.对于前 "(姓名,日期,,," - >"(姓名,日期)".我认为这更灵活. (2认同)

小智 17

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

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;
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*nci 9

使用Apache Commons 的StringUtils 函数removeEnd()

StringUtils.removeEnd("www.domain.com", ".com")   = "www.domain"
Run Code Online (Sandbox Code Playgroud)


sfu*_*ger 8

str = str.substring(0, str.lastIndexOf(",")) + ")";
Run Code Online (Sandbox Code Playgroud)