Например, у меня есть строка "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();
}
Но это долгий путь. Конечно, есть более короткий способ сделать это
@ dimitri08 Код, который вы написали, превратится "Doe John"
в просто John
, чего вы, похоже, и хотите. Но вы говорите, что это не то, чего вы хотите. Либо [A] отредактируйте вопрос и исправьте эту часть, либо [B] объясните, почему function("Doe John") -> "John"
— это не то, что вы ищете. Пока вы не разъясните это, это не кажется ответственным.
Вы, видимо, не хотите ничего извлекать. Вам нужно просто удалить слово и оставить остаток. Я бы попробовал что-то вроде этого. Регулярное выражение обслуживает ключевое слово, окруженное пробелами, или ключевое слово в начале или в конце строки.
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
@Вычислимый ЛоЛ! Я просто не умею писать. Или я могу писать. Я изменю это. Спасибо!
Это регулярное выражение может быть хорошим началом? Но поиграйте с ним, чтобы убедиться, что он делает то, что вы ищете.
(.*)\b.*?John.*?\b(.*)