Как извлечь подстроку из строки, удалив указанное слово, которое может встречаться где угодно?

Например, у меня есть строка "John Doe", где одно слово — это известное ключевое слово, а другое — оставшаяся часть, которую мне нужно извлечь. Учитывая строку типа "John Doe", я знаю ключевое слово, например, "Doe", и хочу извлечь другое слово, «Джон».

Сначала я попробовал этот подход:

String input = "John Doe";
String keyword = "Doe";
String result = input.replace(keyword, "").trim();

Это отлично работает, если keyword находится в конце строки. Однако он не обрабатывает случаи, когда keyword может находиться в начале или где-то посередине. Например, если введено "Doe John" или если ключевое слово является частью другого слова, например "Johnathan", это не удастся. В случае "Johnathan Doe" неправильное использование "John" в качестве ключевого слова возвращает «атан Доу».

Мне нужен способ надежно извлечь оставшуюся часть строки, когда ключевое слово известно, независимо от его положения в строке, и обрабатывать ключевое слово как целое слово.

Я также попробовал это:

String input = "John Doe";
String receiver = "Doe";
String[] parts = input.split("\\b" + receiver + "\\b");
String result = "";
if (parts.length > 1 && !parts[1].trim().isEmpty()) {
    sender = parts[1].trim();
}
else if (parts.length > 0 && !parts[0].trim().isEmpty()) {
    sender = parts[0].trim();
}   

Но это долгий путь. Конечно, есть более короткий способ сделать это

Это регулярное выражение может быть хорошим началом? Но поиграйте с ним, чтобы убедиться, что он делает то, что вы ищете. (.*)\b.*?John.*?\b(.*)

Anerdw 19.08.2024 00:28

@ dimitri08 Код, который вы написали, превратится "Doe John" в просто John, чего вы, похоже, и хотите. Но вы говорите, что это не то, чего вы хотите. Либо [A] отредактируйте вопрос и исправьте эту часть, либо [B] объясните, почему function("Doe John") -> "John" — это не то, что вы ищете. Пока вы не разъясните это, это не кажется ответственным.

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

Ответы 1

Ответ принят как подходящий

Вы, видимо, не хотите ничего извлекать. Вам нужно просто удалить слово и оставить остаток. Я бы попробовал что-то вроде этого. Регулярное выражение обслуживает ключевое слово, окруженное пробелами, или ключевое слово в начале или в конце строки.

String[] s = {"Johnathan", "John Doe"};
 String keyWord = "John";
 for (String str : s) {
    str = str.replaceAll("(?:^|\\s+)"+keyWord+"(?:$|\\s+)", "");
    System.out.println(str);
 }

принты

Johnathan Doe
Doe

@Вычислимый ЛоЛ! Я просто не умею писать. Или я могу писать. Я изменю это. Спасибо!

WJS 19.08.2024 01:40

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