我正在尝试拆分一个字符串,以便每个数组元素在左括号和右括号之间都有字符。
让我展示一下:
myString = "(2*((3-2)+(5-3)))"
所以我的数组应该有这样的值:
myArray[0] = 2*((3-2)+(5-3));
myArray[1] = (3-2)+(5-3);
myArray[2] = (3-2);
myArray[3] = (5-3);
我试图通过使用 .split() 来做到这一点,但它没有按预期工作。我对整个 RegEx 主题有点陌生
这是我的最新方法:
for (int i = 0; i <sb.length() ; i++) {
if(sb.charAt(i)=='('){
open=i;
between=0;
end=0;
for (int j = i+1; j <sb.length() ; j++) {
if(sb.charAt(j)=='('){
between++;
}
}for (int x = i+1; x <sb.length() ; x++) {
if(sb.charAt(x)==')'){
end++;
}
if(end==between){
a.add(sb.substring(open,x+2));
break;
}
}
}
}
最佳答案
我不知道如何使用正则表达式来实现这一点,但是如果没有正则表达式,我会想到这样的事情:
private void findBetweenNestedBrackets(String input, List<String> matches) {
if(input.contains("(")) {
int firstBracket = input.indexOf("(") + 1;
int lastBracket = input.lastIndexOf(")");
if(firstBracket > lastBracket) {
String firstInsideBracket = input.substring(0, lastBracket);
String secondInsideBracket = input.substring(firstBracket);
matches.add(firstInsideBracket);
matches.add(secondInsideBracket);
findBetweenNestedBrackets(firstInsideBracket, matches);
findBetweenNestedBrackets(secondInsideBracket, matches);
} else {
String insideBracket = input.substring(firstBracket, lastBracket);
matches.add(insideBracket);
findBetweenNestedBrackets(insideBracket, matches);
}
}
}
@Test
public void test() {
final String input = "(2*((3-2)+(5-3)))";
List<String> matches = new ArrayList<>();
findBetweenNestedBrackets(input, matches);
matches.forEach(System.out::println);
}
这个解决方案并不完美,它会打印:2*((3-2)+(5-3))
(3-2)+(5-3)
3-2)+(5-3 I assume this is not what you wanted, but you can get rid of such later
3-2
5-3
但我相信它接近你想要达到的目标。
关于java - 如何获取组中嵌套括号的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62152822/