如何在Java 1.8中提取已知起止标记间的可变长度字符串
Java 1.8 提取标记间可变长度子串的实现方案
可以通过正则表达式结合Java 1.8的Pattern和Matcher类实现需求,核心思路是动态生成匹配规则,精准定位-$tagName$-和-$tagNameEnd$-之间的任意长度内容。
实现代码
下面是封装好的工具方法,支持根据指定标签名提取对应内容:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class TagContentExtractor { // 提取指定标签间的内容,标签名需与标记中的大小写完全匹配 public static String extractContent(String originalStr, String tagName) { // 构建正则表达式:匹配-$tagName$-开头,-$tagNameEnd$-结尾,中间捕获任意非换行内容 String regex = "-\\$" + tagName + "\\$-([\\s\\S]*?)-\\$" + tagName + "End\\$-"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(originalStr); if (matcher.find()) { return matcher.group(1).trim(); // 返回捕获组的内容,去除首尾空格 } return null; // 未找到对应标签时返回null,也可根据需求返回空字符串 } public static void main(String[] args) { // 用户提供的原始字符串 String sourceStr = "-$ErrorCode$-0-$ErrorCodeEnd$--$Errortext$-Success-$ErrorTextEnd$--$val1$-test160-$val1End$--$LIST1$--$val2$--test1160--$val2End--$List2End$-"; // 提取各标签内容 String errorCode = extractContent(sourceStr, "ErrorCode"); String errorText = extractContent(sourceStr, "Errortext"); String val1 = extractContent(sourceStr, "val1"); String val2 = extractContent(sourceStr, "val2"); // 输出结果 System.out.println("ErrorCode: " + errorCode); System.out.println("Errortext: " + errorText); System.out.println("val1: " + val1); System.out.println("val2: " + val2); } }
代码说明
- 正则规则:
-\\$" + tagName + "\\$-([\\s\\S]*?)-\\$" + tagName + "End\\$-中,[\\s\\S]*?用于匹配任意字符(包括换行),*?是非贪婪模式,避免匹配到后续其他标签的结束标记。 - 大小写注意:标签名需与原始字符串中的标记严格一致(比如示例中的
Errortext和ErrorTextEnd,注意Text的大小写),否则无法匹配。 - 边界处理:未找到对应标签时返回
null,可根据业务需求修改为返回空字符串。
运行上述代码,输出结果为:
ErrorCode: 0 Errortext: Success val1: test160 val2: test1160
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

