java - 使用java从字符串中仅删除嵌套的大括号

标签 java regex parsing

我有一个任务,其中消息中有嵌套的大括号。我的动机是只删除最里面的大括号,消息的其余部分保持不变。字符串消息的示例如下:

enter code here Input :  {4:{CLIENT ACCOUNT} :-}
                Output:  {4: CLIENT ACCOUNT :-}

所以基本上我们需要确保删除最里面的大括号,其余内容保持不变。如何去做?

我能够使用以下伪代码删除一级大括号:

enter code here
String str ="{CLIENT ACCOUNT}";
String regex = "(\\{|\\})"; 
str = str.replaceAll(regex, "");
System.out.println("Formatted String is--"+str);

但我不知道如何使用正则表达式来忽略第一级大括号。任何帮助将不胜感激。

最佳答案

我不知道如何使用 java 正则表达式来做到这一点,但你可以这样做:

String str = "someContent";
String newStr = "";
int level = 0;
for (int i = 0; i < str.length(); ++i){
    if (str.charAt(i) == '{'){
        if (level == 0) //check before incrementing
            newStr += "{";
        level++;
    } else if (str.charAt(i) == '}'){
        level--;
        if (level == 0) //check after incrementing
            newStr += "}";
    } else {
        newStr += str.charAt(i);
    }
}

return newStr;

您基本上会遍历字符串中的每个字符,并记住您已经看到了多少个“{”和“}”。然后,只有当净计数为零(或最外面的括号)时,才将它们打印出来

关于java - 使用java从字符串中仅删除嵌套的大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23787534/

相关文章:

java - 使用 Java 上传图像无法正确保存在云中

MySQL REGEXP 用于以开头的数字

正则表达式 "either/or"但不是 "neither"

python - 如何在 Python 中拆分和解析字符串?

java - 在 Java Hadoop 中读取文件

具有非紧凑字符串的 Java 紧凑字符串 equalsIgnoreCase 计算结果为 false

java - 为什么 System.in 声明为 nullInputStream() 而不是 null?

c - 正则表达式获取 C 语言的完整名称

c++ - 如何使用 Clang 从 C++ 字符串生成 AST?

c - 在文件解析中使用 fgets()