为了账号安全,请及时绑定邮箱和手机立即绑定

如何获取java字符串中.之前的()之间的值?

如何获取java字符串中.之前的()之间的值?

慕尼黑5688855 2023-09-27 17:13:11
我必须将文件名替换abc(1).jpg为abc(2).jpg. 这是代码 String example = "my attachements with some name (56).jpg"; Matcher m = Pattern.compile("\\((\\d{1,}).\\)").matcher(example); int a = 0; while(m.find()) {    a=Integer.parseInt(m.group(1));String p = example.replace(String.valueOf(a), String.valueOf(a+1)); }它按照给定的用例正常工作。但在 abc(ab)(1)(ab).jpg 这种情况下失败了,它只是更改为abc(ab)(2)(ab).jpg。这不是必需的。那么我如何验证数字括号就在点 ie 之前。
查看完整描述

2 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

您可以使用


String example = "my attachements with some name (56).jpg";

Matcher m = Pattern.compile("(?<=\\()\\d+(?=\\)\\.)").matcher(example);

example = m.replaceAll(r -> String.valueOf(Integer.parseInt(m.group())+1) );

System.out.println( example );

// => my attachements with some name (57).jpg

请参阅Java 演示。使用的正则表达式是

(?<=\()\d+(?=\)\.)

请参阅正则表达式演示。它匹配

  • (?<=\()- 紧随其后的位置(

  • \d+- 然后消耗 1+ 位数字

  • (?=\)\.)- 紧接着是).字符序列。

如果您需要告诉正则表达式匹配字符串中最后一个点(最有可能是扩展分隔符)的点,请替换(?=\)\.)(?=\)\.[^.]*$). 请参阅此正则表达式演示


查看完整回答
反对 回复 2023-09-27
?
函数式编程

TA贡献1807条经验 获得超9个赞

您可以为此使用前瞻正则表达式:

"\\((\\d+)\\)(?=\\.)"

(?=\.)是一个先行条件,断言关闭后立即存在点)

正则表达式演示


查看完整回答
反对 回复 2023-09-27
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信