You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字符串中移除任意位置的指定完整单词并提取剩余子串

提取字符串中排除完整关键词的剩余部分

我有一个类似 "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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:15:06