Java - разделение без учета регистра с разделением строки VARIABLE

тест программы так что у меня есть программа, которой будут даны две строки в качестве аргументов: 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;
    }

Из любопытства, есть ли причина, по которой вы используете split, а не replaceAll?

Roddy of the Frozen Peas 13.08.2018 23:44

К вашему сведению, вы можете использовать String.join("", array) вместо цикла.

shmosel 13.08.2018 23:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
521
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте шаблон регулярного выражения с флагами CASE_INSENSITIVE и LITERAL:

return Pattern.compile(remove, Pattern.CASE_INSENSITIVE | Pattern.LITERAL)
        .matcher(base).replaceAll("");

Что также можно было сделать с помощью return base.replaceAll("(?i)" + Pattern.quote(remove), "");

Andreas 14.08.2018 00:15
Ответ принят как подходящий

Метод String.replaceAll () принимает регулярное выражение, которое вы можете использовать напрямую, например:

return base.replaceAll ("(? i) (" + remove + ") [\ s] *", "")

спасибо, это именно то, что мне нужно. Проблема заключалась в том, как я писал код после разделения. Я написал это как base.split ((? I) (remove)) ;. он должен был выглядеть так ("(? i) (" + remove + ")")

CodingCris 14.08.2018 03:17

Это не сработает с любыми специальными символами, такими как ..

shmosel 14.08.2018 19:19

Другие вопросы по теме