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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (33)

给定两个字符串,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;
}

提问于
用户回答回答于

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

如何调试小程序

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

这段代码有两个问题。

  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;
}
用户回答回答于

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

扫码关注云+社区

领取腾讯云代金券