如何替换Java中第一次出现的字符串

Posted

技术标签:

【中文标题】如何替换Java中第一次出现的字符串【英文标题】:How to replace first occurrence of string in Java 【发布时间】:2012-06-09 11:31:45 【问题描述】:

我想替换下面第一次出现的字符串。

  String test = "see Comments, this is for some test, help us"

**如果测试包含如下输入,则不应替换

    见评论,(末尾有空格) 见 cmets, 查看评论**

我想得到如下输出,

 Output: this is for some test, help us

提前致谢,

【问题讨论】:

What have you tried? 你可以直接用谷歌搜索你的问题,或者把你的眼睛稍微移到这条评论的右边,然后查看相关问题... 或者你可以查看String的文档并找到replaceFirst()... Google 会告诉你如何替换第一次出现的正则表达式,而不是字符串。 【参考方案1】:

你可以使用String的replaceFirst(String regex, String replacement)方法。

【讨论】:

这是为 REGEXes 而不是字符串。 @Sridhar-Sarnobat 我猜我在答案中提到的参数可以理解这一点?这就是它应该被使用的方式。 . 这可能适用于正则表达式,但即使您提供字符串而不是构建的正则表达式也可以。我刚测试过。所以上面的讨论让看到这个的人感到困惑。答案是完美的。 如果您尝试替换包含- 的字符串怎么办? @Sridhar-Sarnobat 当搜索字符串包含不应该被解释的模式字符时,您可以先通过Pattern.quote(…) 过滤字符串。不过,使用Pattern.compile(searchString, Pattern.LITERAL).matcher(input) .replaceAll(replacement) 可能会更有效……【参考方案2】:

您应该使用已经过测试且记录良好的库来编写自己的代码。

org.apache.commons.lang3.
  StringUtils.replaceOnce("coast-to-coast", "coast", "") = "-to-coast"

Javadoc

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#replaceOnce-java.lang.String-java.lang.String-java.lang.String-

甚至还有一个不区分大小写的版本(这很好)。

Maven

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

学分

我的回答是:https://***.com/a/10861856/714112

【讨论】:

感谢您的回答,但因为 String 类中的 replaceFirst 用于正则表达式。但仅仅为了一个简单的字符串替换,我必须在我的项目中引入一个新库。不值得..任何替代品? 是的,动态链接库很痛苦。您可以复制并粘贴库源代码。【参考方案3】:

您可以使用以下语句将第一次出现的文字字符串替换为另一个文字字符串:

String result = input.replaceFirst(Pattern.quote(search), Matcher.quoteReplacement(replace));

但是,这在后台做了很多工作,而用于替换文字字符串的专用函数不需要这些工作。

【讨论】:

这是最好的答案,因为它也处理正则表达式字符并且它不依赖于外部库。 不幸的是它不起作用,试试这个:"I want to earn in euro!".replaceFirst(Pattern.quote("euro"), "$"); @FilipStachowiak 修复了它。【参考方案4】:

使用substring(int beginIndex):

String test = "see Comments, this is for some test, help us";
String newString = test.substring(test.indexOf(",") + 2);
System.out.println(newString);

输出:

这是一些测试,帮助我们

【讨论】:

等等,如果要替换的字符串不在输入字符串的开头怎么办?【参考方案5】:

您可以使用以下方法。

public static String replaceFirstOccurrenceOfString(String inputString, String stringToReplace,
        String stringToReplaceWith) 

    int length = stringToReplace.length();
    int inputLength = inputString.length();

    int startingIndexofTheStringToReplace = inputString.indexOf(stringToReplace);

    String finalString = inputString.substring(0, startingIndexofTheStringToReplace) + stringToReplaceWith
            + inputString.substring(startingIndexofTheStringToReplace + length, inputLength);

    return finalString;


以下link 提供了使用带和不带正则表达式替换第一次出现的字符串的示例。

【讨论】:

【参考方案6】:

使用 String replaceFirst 将分隔符的第一个实例交换为唯一的:

String input = "this=that=theother"
String[] arr = input.replaceFirst("=", "==").split('==',-1);
String key = arr[0];
String value = arr[1];
System.out.println(key + " = " + value);

【讨论】:

【参考方案7】:

你也可以用这个方法;

public static String replaceFirstOccurance(String str, String chr, String replacement)
    String[] temp = str.split(chr, 2);
    return temp[0] + replacement + temp[1];

【讨论】:

那行不通,split 适用于正则表达式。

以上是关于如何替换Java中第一次出现的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何替换字符串中所有但第一次出现的模式

Java如何替换所有指定(出现)的字符串?

String.Replace 仅替换第一次出现的匹配字符串。如何替换 *all* 出现?

如何替换 JavaScript 中所有出现的字符串

如何替换 JavaScript 中所有出现的字符串

如何替换 JavaScript 中所有出现的字符串