我有一个如下的字符串。
$x:Test( (x==5 || y==4) && ( (r==9 || t==10) && ( n>=2 || t<=4))) demo program
在上面的字符串中,左右括号的数量将根据条件而改变。
我的要求是每当我遇到最后一个右括号时就需要连接下面的字符串。
from "stream"
所以结果如下。
$x:Test( (x==5 || y==4) && ( (r==9 || t==10) && ( n>=2 || t<=4))) from "stream" demo program
为了实现这一点,我正在尝试使用以下 java 代码。
Pattern pattern = Pattern.compile(".*?\\.Event\\(([^\\(]*?|\\([^\\)]*?\\))*\\)");
if(line.matches(".*\\.Test(.*).*")){
line = pattern.matcher(line).replaceAll("$0 from \""+"stream"+"\""+" ");
}
但是如果左右括号的数量超过 5,上面的代码就不起作用。
需要指针来实现所需的结果,我的意思是我需要任意数量的左括号和右括号的通用解决方案。
最佳答案
为什么你想用正则表达式来做这件事?只需使用简单的 String
类方法 - String#lastIndexOf
和 String#substring
解决问题的方法:-
String str = "$x:Test( (x==5 || y==4) && ( (r==9 || t==10) && " +
"( n>=2 || t<=4))) demo program";
int index = str.lastIndexOf(")");
str = str.substring(0, index + 1) + " from \"stream\"" +
str.substring(index + 1);
Regexp
是一种非常强大的语言,但对于这样的事情来说实际上并不需要,因为您可以确定需要在哪里分割字符串。
关于java - 关于java中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139337/