тест программы так что у меня есть программа, которой будут даны две строки в качестве аргументов: base и remove. Его нужно вынуть удалить из базы. Я использую метод разделения, чтобы удалить вторую строку из первой. Однако регистр символов второй строки не должен иметь значения, в то время как регистр первой строки должен быть сохранен. Я нашел много способов сделать это, когда вы определяете строку удаления в программе как строковый литерал: я могу использовать, например,? I, но поскольку remove входит как аргумент, а не как литерал, который я определяю в программа, это не работает. Пожалуйста, проверьте мою прикрепленную картинку, чтобы вы могли точно увидеть, где это не удается. Цените помощь.
public String withoutString(String base, String remove) {
String array[] = base.split(remove);
String result = "";
for(int i = 0; i<array.length;i++)
result+= array[i];
return result;
}
К вашему сведению, вы можете использовать String.join("", array) вместо цикла.




Используйте шаблон регулярного выражения с флагами CASE_INSENSITIVE и LITERAL:
return Pattern.compile(remove, Pattern.CASE_INSENSITIVE | Pattern.LITERAL)
.matcher(base).replaceAll("");
Что также можно было сделать с помощью return base.replaceAll("(?i)" + Pattern.quote(remove), "");
Метод String.replaceAll () принимает регулярное выражение, которое вы можете использовать напрямую, например:
return base.replaceAll ("(? i) (" + remove + ") [\ s] *", "")
спасибо, это именно то, что мне нужно. Проблема заключалась в том, как я писал код после разделения. Я написал это как base.split ((? I) (remove)) ;. он должен был выглядеть так ("(? i) (" + remove + ")")
Это не сработает с любыми специальными символами, такими как ..
Из любопытства, есть ли причина, по которой вы используете
split, а неreplaceAll?