给定两个字符串base和remove,返回基本字符串的一个版本,其中删除了删除字符串的所有实例

时间:2015-08-20 21:25:51

标签: java string

给定两个字符串baseremove,返回base字符串的一个版本,其中remove字符串的所有实例都已删除(不区分大小写)。

您可以假设删除字符串的长度为1或更长。仅删除不重叠的实例,因此"xxx"删除"xx""x"。 例如,

withoutString("Hello there", "llo") → "He there"
withoutString("Hello there", "e") → "Hllo thr"
withoutString("Hello there", "x") → "Hello there"

但是我在编码中遇到了大多数测试用例。有人可以帮帮我吗?

public String withoutString(String base, String remove) {

   String result = "";
   for(int i = 0; i < base.length() - remove.length(); i++){
      if(!(base.substring(i, i + remove.length()).equalsIgnoreCase(remove))){
         result += base.substring(i, i + 1);
      }
      else{
         i = i + remove.length();
      }
   }

   return result;
}

enter image description here

8 个答案:

答案 0 :(得分:2)

在您阅读本答案中的任何其他内容之前,请注意您应阅读本文:

How to Debug Small Programs

它将帮助您解决此类问题以及未来编程生活中的问题。那说:

此代码存在两个问题。

    无论什么,
  1. i每次增加一个位置。如果找不到子字符串,你想要推进它是正确的,但问题是你推进了太多空格。因此,不要使用i + remove.length(),而是使用:

    i = i + remove.length() - 1;
    
  2. 如果剩余字符串短于删除大小,则不能在末尾正确添加字符串的最后一位。这就是THIS is a FISH打破你的原因。您可以对其进行特殊检查,然后运行到列表的末尾,例如

    for (int i = 0; i < base.length(); i++) {
        if(i > base.length() - remove.length()) {
            result += base.substring(i, base.length());
            break;
    
  3. 这是完整的程序:

    public String withoutString(String base, String remove) {
      String result = "";
      for (int i = 0; i < base.length(); i++) {
        if (i > base.length() - remove.length()) {
          result += base.substring(i, base.length());
          break;
        } else {
          String substring = base.substring(i, i + remove.length());
          if (!(substring.equalsIgnoreCase(remove))) {
            result += base.charAt(i);
          } else {
            i = i + remove.length() - 1;
          }
        }
      }
      return result;
    }
    

答案 1 :(得分:0)

String对象中有一个函数可以使用常规表达式替换或删除字符串片段。

public String remove(String base, String remove) {

  return base.replaceAll(getRegExp(remove), "");
}

private String getRegExp(String remove) {

  StringBuilder regExp = new StringBuilder();

  for (Character caracter : remove.toCharArray()) {
    regExp.append("[").append(Character.toLowerCase(caracter))
      .append(Character.toUpperCase(caracter)).append("]");
  }

  return regExp.toString();
}

答案 2 :(得分:0)

我的答案有效。似乎更简单。期待更好的。

public String withoutString(String base, String remove) {
  String str = "";
  for(int i = 0; i < base.length()-remove.length()+1;i++){
    if(base.substring(i,i+remove.length()).equalsIgnoreCase(remove)){
      base = base.substring(0,i)+base.substring(i+remove.length());
      i--;
    }
  }
  return base;
}

答案 3 :(得分:0)

public String withoutString(String base, String remove){
    String result = "";
    for(int i =0;i<base.length();i++){
        if(i<=base.length()-remove.length() && base.substring(i,i+remove.length()).equalsIgnoreCase(remove))
            i+=remove.length()-1;
        else
            result+=base.charAt(i);
        }
        return result;
    }

这对我有用。

答案 4 :(得分:0)

public String withoutString(String base, String remove) {
  StringBuilder sb= new StringBuilder();
  sb.append(base);
    while(sb.toString().toLowerCase().indexOf(remove.toLowerCase())!=-1)
    sb.replace(sb.toString().toLowerCase().indexOf(remove.toLowerCase()),sb.toString().toLowerCase().indexOf(remove.toLowerCase())+remove.length(),"");
  return sb.toString();
}

答案 5 :(得分:0)

public String withoutString(String base, String remove) {
  String newStr = "";
  int bLength = base.length();

      int rLength = remove.length();
      
      for (int i =0; i < bLength; i++){
        if (i <= bLength-rLength && base.substring(i, i+rLength).equalsIgnoreCase(remove){
          i += rLength-1;
          continue;
        }
        newStr += base.charAt(i);
      }
      return newStr;
    }

答案 6 :(得分:0)

这是解决此问题的另一种方法:

public String withoutString(String base, String remove) { 
    return base.replaceAll("(?i)" + remove, "");
}

答案 7 :(得分:0)

这是我对这个问题的答案。

  public static String withoutString(String str, String D) {
    String temp = "";
    for (int i = 0; i < str.length(); i++) {
        temp += str.substring(i, i+1);
        if (temp.length() >= D.length() && temp.substring(temp.length() - D.length() , temp.length()).equalsIgnoreCase(D)) {
            temp = temp.substring(0, temp.length() - D.length());
        }
    }
    return temp;
}