给定两个字符串base
和remove
,返回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;
}
答案 0 :(得分:2)
在您阅读本答案中的任何其他内容之前,请注意您应阅读本文:
它将帮助您解决此类问题以及未来编程生活中的问题。那说:
此代码存在两个问题。
i
每次增加一个位置。如果找不到子字符串,你想要推进它是正确的,但问题是你推进了太多空格。因此,不要使用i + remove.length()
,而是使用:
i = i + remove.length() - 1;
如果剩余字符串短于删除大小,则不能在末尾正确添加字符串的最后一位。这就是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;
}
答案 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;
}