代码之家  ›  专栏  ›  技术社区  ›  user4833678

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

  •  -1
  • user4833678  · 技术社区  · 10 年前

    给定两个字符串, 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 回复  |  直到 10 年前
        1
  •  1
  •   durron597    10 年前

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

    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;
      

    以下是完整的程序:

    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;
    }
    
        2
  •  1
  •   Stardust    6 年前

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

    public String withoutString(String base, String remove) { 
        return base.replaceAll("(?i)" + remove, "");
    }
    
        3
  •  1
  •   tim-montague    6 年前

    这对我有用。。。

    public String withoutString(String base, String remove) {
        String result = "";
    
        for (int i = 0; i < base.length(); i += 1) {
            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
  •   ElChava    8 年前

    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();
    }
    
        5
  •  0
  •   Jinze Yuan    7 年前

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

    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;
    }
    
        6
  •  0
  •   nanda kishore Mundru    6 年前
    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();
    }
    
        7
  •  0
  •   justNate    6 年前
    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;
        }
    
        8
  •  0
  •   Alparslan    5 年前

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

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