Java 解析括号内子字符串的内容
本文介绍Java几种方式解析字符串中括号内字串。
1. 问题描述
假设String input = "test data (测试)",现在需要获取括号内的测试字串。
也有可能给定字符串包括多个括号组:
String input = "test data (测试)(data)" ,解析结果为:测试 和 data 。
2. 多种方式实现
2.1 直接定位
我们首先想到的直接使用 String的indexOf方法进行定位:
String input = "test data (测试)";
String output = input.substring(input.indexOf("(") + 1 ,input.indexOf(")"));
log.info("output={}", output);
这种方法缺少灵活性,当有多个括号时不支持。
2.2. 正则方式
下面使用正则进行解析,支持多个括号组:
String input = "test data (测试)(data)";
String pattern = "\\(([^\\)]+)\\)";
Matcher matcher = Pattern.compile(pattern).matcher(input);
while (matcher.find()) {
String output = matcher.group(1);
log.info("output={}", output);
}
正则解释:
\\(: 表示字符((: 开始匹配组[: 中括号表示可选内容^: 表示不是后续字符): 在前面加上^, 表示除了 “)” 的所有字符+: 表示1个或多个[]括号内的字符集): 停止匹配组\\): 表示关闭括号
如果明确知道有几个括号也可以简化:
String input = "test data (测试)data";
String [] outs = input.split("[\\(\\)]");
log.info(outs[1]);
2.3. 第三方库
这里使用 org.apache.commons.lang3包中的StringUtils工具包,它提供了类似的实现:
String input0 = "test data (测试)";
String input1 = "test data (测试)(data)";
String output = StringUtils.substringBetween(input, "(", ")");
String [] out = StringUtils.substringsBetween(input1,"(", ")");
同时支持单个括号或多个括号组,且括号作为参数,使用简单不失灵活。
3. 总结
本文介绍了Java几种方式解析字符串中包括括号内的子字符串内容。直接使用Java String内置方法定位,使用正则表达式以及第三方库进行解析。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/108152879


