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

如何截取字符串中指定起始词与结束词之间的内容?

提取字符串中指定关键词间的内容

针对你需要从长字符串里提取“What”和“like?”之间内容的需求,这里提供两种实用的Java实现方案:

方法一:使用字符串索引定位

通过indexOf定位关键词的位置,再用substring截取目标内容,适合简单场景:

String newspaper = "...Blablabla... What do you like?...Blablabla... ";

// 定位"What"的起始位置,计算内容提取的起始点
int startMarker = newspaper.indexOf("What");
int contentStart = startMarker + "What".length();
// 从内容起始点开始定位"like?"的位置
int contentEnd = newspaper.indexOf("like?", contentStart);

// 处理关键词不存在的边界情况
if (startMarker != -1 && contentEnd != -1) {
    String extracted = newspaper.substring(contentStart, contentEnd).trim();
    System.out.println(extracted); // 输出:do you
} else {
    System.out.println("未找到目标关键词");
}

方法二:使用正则表达式

正则表达式更灵活,支持匹配多组目标内容,适合复杂场景:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ContentExtractor {
    public static void main(String[] args) {
        String newspaper = "...Blablabla... What do you like?...Blablabla... What else do you like?...";
        
        // 正则规则:匹配"What"后到"like?"前的任意内容(非贪婪模式,避免匹配到最后一个"like?")
        Pattern pattern = Pattern.compile("What(.*?)like\\?");
        Matcher matcher = pattern.matcher(newspaper);
        
        // 遍历所有匹配结果
        while (matcher.find()) {
            // group(1)对应正则中括号捕获的内容,trim去除前后多余空格
            String result = matcher.group(1).trim();
            System.out.println(result); // 依次输出:do you、else do you
        }
    }
}

注意事项

  • 正则里的\\?是转义问号,因为问号在正则中是特殊字符
  • 非贪婪模式.*?会确保匹配到第一个"like?"就停止,若需匹配到最后一个"like?",可改用贪婪模式.*
  • 两种方法都建议添加关键词不存在的判断,避免索引越界异常

内容的提问来源于stack exchange,提问作者Robin7643982

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:05:27