如何从字符串中移除任意位置的指定完整单词并提取剩余子串
提取字符串中排除完整关键词的剩余部分
我有一个类似 "John Doe" 的字符串,其中一个是已知关键词,需要提取剩下的部分。比如已知关键词是 "Doe",要提取出 "John"。
最初尝试的方法:
String input = "John Doe"; String keyword = "Doe"; String result = input.replace(keyword, "").trim();
这种方法仅在关键词位于字符串末尾时有效,无法处理关键词在开头、中间,或是关键词作为其他单词一部分的情况。比如输入 "Doe John" 时结果不符合预期,或者输入 "Johnathan Doe" 用 "John" 做关键词,会错误得到 "athan Doe"。
需要一种可靠的方法,无论关键词在字符串哪个位置,都能将其视为完整单词并提取剩余部分。之前尝试的split方法过于繁琐:
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(); }
简洁实现方法
方法1:正则替换+清理空格
使用\b匹配单词边界,替换掉完整关键词,再清理多余空格:
String input = "Doe John"; String keyword = "Doe"; // 匹配完整单词,替换后清理前后空格和中间多余空格 String result = input.replaceAll("\\b" + Pattern.quote(keyword) + "\\b", "").trim().replaceAll("\\s+", " ");
Pattern.quote(keyword):避免关键词包含正则特殊字符(比如.、*)导致匹配出错replaceAll("\\s+", " "):处理关键词移除后可能出现的多个连续空格
方法2:分割后过滤并拼接
按空格分割成单词列表,过滤掉和关键词完全匹配的项,再拼接剩余单词:
String input = "Johnathan Doe"; String keyword = "Doe"; String result = Arrays.stream(input.split("\\s+")) .filter(word -> !word.equals(keyword)) .collect(Collectors.joining(" "));
方法3:简化split逻辑
基于原split思路简化处理:
String input = "John Doe"; String keyword = "Doe"; String result = Arrays.stream(input.split("\\b" + Pattern.quote(keyword) + "\\b")) .map(String::trim) .filter(s -> !s.isEmpty()) .collect(Collectors.joining(" "));
内容的提问来源于stack exchange,提问作者dimitri08
相关产品推荐
相关产品推荐

