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

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内置方法定位,使用正则表达式以及第三方库进行解析。

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个比较基础的汇编语言问题,我来给您讲解一下。 首先,我们需要定义一个字符串变量,假设它的名字是STRING,存储在数据段中。然后,我们需要编写一个段内子程序,将小写字母转化成大写字母。最后,在主程序中,调用这个子程序,并将转换后的STRING内容输出。 以下是一个简单的实现代码,您可以参考一下: ``` ; 数据段 .386 .MODEL FLAT, STDCALL .DATA STRING DB 'hello, world!', 0 .CODE .SUBROUTINE ConvertToUpper push ebp mov ebp, esp push ebx push ecx push edx mov ebx, [ebp + 8] ; 参数1:字符串的地址 mov ecx, 0 ; 初始化计数器 LoopStart: mov al, [ebx + ecx] ; 读取字符 cmp al, 'a' ; 判断是否为小写字母 jb NotLower cmp al, 'z' ja NotLower sub al, 'a' - 'A' ; 转化为大写字母 mov [ebx + ecx], al ; 将结果存回字符串中 NotLower: inc ecx ; 计数器加1 cmp byte ptr [ebx + ecx], 0 ; 判断是否到达字符串结尾 jne LoopStart pop edx pop ecx pop ebx mov esp, ebp pop ebp ret ENDSUBROUTINE ; 主程序 START: mov eax, OFFSET STRING ; 将字符串地址存入eax寄存器 call ConvertToUpper ; 调用子程序 ; 输出转换后的字符串 mov edx, OFFSET STRING mov ecx, LENGTHOF STRING mov ebx, 1 mov eax, 4 int 0x80 ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80 END START ``` 在这个代码中,我们定义了一个名为ConvertToUpper的子程序,它接受一个字符串的地址作为参数,将其中的小写字母转化为大写字母,并将结果存回字符串中。在主程序中,我们首先将字符串的地址存入eax寄存器,然后调用ConvertToUpper子程序。最后,我们使用Linux系统调用,将转换后的字符串输出,并退出程序。 希望这个例子能够帮助您理解汇编语言的基础知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值