替换字符串的最后一部分

问题描述 投票:0回答:12

我想用

,
替换最后一个字符串
)

假设字符串是:

插入对偶(姓名,日期,

将其转换为:

插入对偶(姓名,日期)

java regex string replace
12个回答
86
投票

以下代码应将最后一次出现的

','
替换为
')'

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

注意 如果

String
不包含
','
,这将抛出异常。


41
投票

您可以使用正则表达式:

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

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

Plus! 如果您想确保处理尾随空格和制表符,只需将正则表达式更改为“

,\[ \t\]*$
”即可。注意:'
\[
'和'
\]
'没有反斜杠(我不知道如何正确转义它)。


20
投票

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

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;
}

9
投票
str = str.substring(0, str.lastIndexOf(",")) + ")";

9
投票

使用 Apache Commons' StringUtils 函数 removeEnd():

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

2
投票

更易读的方式...您可以使用它来了解 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);

1
投票

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

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


1
投票

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

替换字符串中最后一次出现的字符

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

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

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

先替换

反向

以下是我如何实现它,以简单地从我想要解释的代码片段中删除一些 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();
}

0
投票

尝试这个正则表达式

(^.+)b(.+$)

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

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

0
投票

)
替换字符串的最后一个字符:

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

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


0
投票

以下是如何替换另一个字符串中最后一次出现的字符串:

String yourString = "foo, foo, foo, bar!";

yourString = yourString.replaceAll("foo, (?!foo, )", "bar!, ");

(?!foo, )
确保之后不会出现
foo, 


-2
投票

只要做到以下几点,还有什么麻烦呢?

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

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

© www.soinside.com 2019 - 2024. All rights reserved.