我正在尝试拆分一个字符串,以便每个数组元素都有左括号和右括号之间的字符。让我来展示一下:
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;
}
}
}
}发布于 2020-06-02 23:09:03
我不知道如何使用regexp来实现这一点,但是如果不使用regex,我会想到这样的东西:
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我想这不是你想要的,但你以后可以去掉它
3-2
5-3
但我相信这与你想要实现的目标很接近。
https://stackoverflow.com/questions/62152822
复制相似问题