Это проблема с сайта CodingBat. Сначала я вставляю проблему и после этого обсуждаю свои усилия:
Если заданы две строки, 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) {
int len_b=base.length();
int len_r = remove.length();
String result="";
if(len_b<1 || len_r<1)
return "";
for (int i =0;i<=len_b-len_r;i++)
{
if(base.substring(i,i+len_r).equals(remove))
{
i=i+len_r-1;
}
else
{
result=result+base.substring(i,i+1);
}
}
if(!(base.substring(len_b-len_r+1, len_b).equals(remove)))
result=result+base.substring(len_b-len_r+1, len_b);
return result;
}
Это проходит все тестовые случаи, за исключением тех, где удаление строки должно быть без учета регистра.
Например: withoutString("This is a FISH", "IS") → "Th a FH"
Мой код дает мне «Это FH», так как я не обработал чувствительность к регистру в моем коде. Я знаю, что с помощью Regex это можно сделать в одну строку. Мне больше интересно узнать, есть ли способ обработки подобных тестов в моем нынешнем коде.
Также, пожалуйста, дайте мне знать, можно ли сделать мой код более эффективным / элегантным.