java - 如何获取组中嵌套括号的内容

标签 java regex

我正在尝试拆分一个字符串,以便每个数组元素在左括号和右括号之间都有字符。
让我展示一下:

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/

相关文章:

javascript - jsp中如何通过点击href标签传递数据

java - 硬java数组情况

java - 仅从 Maven 测试调用 init 方法失败 ested 异常为 java.lang.UnsupportedOperationException

MySQL 正则表达式 + 空格 (\s)

regex - 学习中级到高级正则表达式的好教程?

java - 数组更改不起作用

java - 反射 API 中的方法类

java - 如何完全加载音频但稍后再播放?

c# - 匹配以随机内容开头的可选模式

java - 正则表达式从日志条目中获取请求参数的特定部分?