如何截取字符串中指定起始词与结束词之间的内容?
提取字符串中指定关键词间的内容
针对你需要从长字符串里提取“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
相关产品推荐
相关产品推荐

