Skip to main content
 首页 » 编程设计

Java 解析括号内子字符串的内容

2022年07月19日149zdz8207

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
阅读延展