首页 > 解决方案 > 如果函数有多个参数,如何在不使用 replace 方法的情况下替换 java 中的子字符串?

问题描述

我正在编写一个函数,它将返回一个字符串,其中一个子字符串的所有实例都替换为一个较小的子字符串。例如,如果用户输入字符串“aabaacaaa”,输入“aa”作为单词,输入“a”作为应该返回“abacaa”的字母。我的只是返回“aabaacaaa”。

问题是当函数有超过2个参数时,我还没有找到替换字符串的方法,而不使用replace方法。我见过的所有例子总是有一个或两个参数,而且从来没有更多。这是我现在拥有的代码。

    public static String replaceWordWithLetter(String str, String word, String c)
    {
        //This method will return 'str' with all instances of 'word' replaced by letter 'c'.
        
        String result = "";
        
        for(int i = 0; i < str.length(); i++){
          if(str.substring(i, i+1).equals(word))
          {
            if(word.substring(i, i+1).equals(c))
            {
              word = c;
              result = result + word;
            }
          }
          else{
            result += str.substring(i,i+1);
          }
        }
        
        return result;
    }

标签: java

解决方案


我认为最简单的方法是使用String.index方法。请注意,此解决方案将采用大于字母的字符串。它区分大小写。

String ss = replaceWordWithLetter("aabaacaaa", "aa","a");
System.out.println(ss);

印刷

abacaa
  • 获取字符串中单词的索引。
  • 将所有内容附加到当前结果
  • 附加您的替换字符串。
  • 将原字符串替换为单词位置后的字符串(即单词+wlength)。因此,原始字符串现在就在找到的单词之后开始。
  • 继续直到不再找到要替换的单词(indexOf 返回 -1)。
public static String replaceWordWithLetter(String str, String word, String c) {
     String result = "";
     int idx = 0;
     int wlength = word.length();
     while ((idx = str.indexOf(word)) >= 0) {
        result += str.substring(0, idx)+c;
        str = str.substring(idx+wlength);
     }
     return result+str;
 }

推荐阅读