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

我必须将文件名替换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 之前。


慕尼黑5688855
浏览 102回答 2
2回答

暮色呼如

您可以使用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+ 位数字(?=\)\.)- 紧接着是).字符序列。如果您需要告诉正则表达式匹配字符串中最后一个点(最有可能是扩展分隔符)的点,请替换(?=\)\.)为(?=\)\.[^.]*$).&nbsp;请参阅此正则表达式演示。

函数式编程

您可以为此使用前瞻正则表达式:"\\((\\d+)\\)(?=\\.)"(?=\.)是一个先行条件,断言关闭后立即存在点)正则表达式演示
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java