使用不使用replace()替换字符串的子字符串

时间:2015-11-03 02:21:56

标签: java indexof

问题是:mutation()传递两个字符串并返回一个字符串。 fzgh的第一个字符串中的每个匹配项都替换为第二个字符串。

mutation("Hello. I  want an fzgh.  Give me an fzgh now.", "IPhone 6")-> "Hello. I want an IPhone 6.  Give me an IPhone 6 now."

这是我的尝试:

public static String mutation(String s, String t){
    int f=s.indexOf("fzgh");
    String w="";
    if(f !=-1){
        w=w+s.substring(0,f)+t;
    }
    return w;  
}

我知道.replace(),但我们不允许使用它。我们必须使用indexOf()

4 个答案:

答案 0 :(得分:3)

您可以像这样定义突变

public static String mutation(String s,String t){
 int f=s.indexOf("fzgh");
 int l =4;//length of "fzgh" 
 String w = s;
 while(f!=-1){
    w=w.substring(0,f)+t+w.substring(f+l,w.length());
    f=w.indexOf("fzgh");
 }
  return w;
}

这将从String中删除所有“fzgh”并将其替换为String t。

答案 1 :(得分:2)

如果您可以使用splitjoin方法,则可以轻松解决此问题。

public static String mutation(String s, String t) {
    return String.join(t, s.split("fzgh"));
}

split会将输入字符串拆分为"fzgh"并返回String数组,在这种情况下,它将返回["Hello. I want an ", ". Give me an ", " now."]。现在,您可以使用"IPhone 6"方法将每个元素与join一起加入。

请注意,Java8中引入了join

但如果您只应indexOfsubstring来解决此问题,则代码会更复杂,但不会那么复杂。

  public static String mutation(String s, String t) {
    StringBuilder sb = new StringBuilder();
    int p = 0, q = 0;
    while ((q = s.indexOf("fzgh", p)) >= 0) {
      sb.append(s.substring(p, q));
      sb.append(t);
      p = q+4;
    }
    sb.append(s.substring(p));
    return sb.toString();
  }

答案 2 :(得分:0)

它有点笨拙但你去了,如果你需要解释,我会同时编辑:)

*编辑:它还不够好,会尝试修复它。这是另一种方式,有点不同的解决方案,但不是那么好,如果我无法修复将删除它。

*编辑#2:已修复

    import java.util.Scanner;
    import java.io.*;

class Mutation
{
    public static String mutation(String s, String t){
        String toBeReplaced = "fzgh";
        int sizeOfThatString = toBeReplaced.length();
        String[] array = s.split(" ");
        for (int i = 0; i < array.length; i++) {
            String tempString= array[i];
            if(tempString.length()>sizeOfThatString) {
                if(tempString.contains(toBeReplaced)) {
                    String other = array[i].substring(sizeOfThatString);
                    array[i] = t+other;

                }
            }
            if(tempString.equals(toBeReplaced)) {
                array[i] = t;
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < array.length; i++) {
            if(i!=array.length) {              
                sb.append(array[i]+" ");
            }
            else {
                sb.append(array[i]);
            }
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        Arabic_Randomizer ar= new Arabic_Randomizer();
        System.out.println(ar.mutation("Hello. I  want an fzgh.  Give me an fzgh now.", "IPhone 6"));
    }
}

答案 3 :(得分:0)

使用此代码     公共课程{

       public static String mutation(String w,String s, String t){
           String toBeReplaced = w;
           int sizeOfThatString = toBeReplaced.length();
           String[] array = s.split(" ");
           for (int i = 0; i < array.length; i++) {
               String tempString= array[i];
               if(tempString.length()>sizeOfThatString) {
                   tempString = array[i].substring(0,sizeOfThatString);
                   System.out.println("TempString " +tempString);
               }
               if(tempString.equals(w)) {
                   array[i] = t;
               }
           }
           StringBuilder sb = new StringBuilder();
           for (int i = 0; i < array.length; i++) {
               if(i!=array.length) {              
                   sb.append(array[i]+" ");
               }
               else {
                   sb.append(array[i]);
               }
           }
           return sb.toString();
       }
       public static void main(String[] args) {
           System.out.println(mutation("fzgh","Hello. I  want an fzgh.  Give me an fzgh now.", "IPhone 6"));
       }
   }

出:

  • TempString Hell
  • TempString fzgh
  • 你好。我想要一部iPhone 6现在给我一台iPhone 6。