如何判断字符串仅包含{([])}字符?正则表达式失效求助
解决字符串仅包含指定括号字符的检查问题
看起来你在写一个方法检查字符串是否只包含{([])}这些括号字符时遇到了正则表达式的问题,我来帮你梳理一下问题所在并给出解决方案。
问题分析
你当前使用的正则表达式"[{(\\[\\])}]"存在两个关键问题:
- 匹配范围不对:
matches()方法会检查整个字符串是否完全匹配正则表达式,而你写的这个正则只能匹配单个符合条件的字符(比如"{"或"("),对于长度大于1的字符串(比如你的测试用例"([)()]")自然无法匹配成功。 - 字符类写法冗余:在正则的字符类
[]内部,除了]需要转义(或者放在字符类开头),其他括号(){}不需要额外转义,你的写法有点多余。
正确的解决方案
我们需要调整正则表达式,确保它能匹配整个字符串都由指定括号组成,正确的正则应该是:"^[(){}\\[\\]]+$"
正则说明
^:匹配字符串的开头[(){}\\[\\]]:字符类,包含所有允许的括号字符:(){}[]+:匹配前面的字符类至少一次(确保字符串不为空,如果允许空字符串可以换成*)$:匹配字符串的结尾
完整的Java方法示例
public static boolean isOnlyBrackets(String s) { // 处理空字符串的情况:如果允许空串返回true,就把+换成* return s != null && s.matches("^[(){}\\[\\]]+$"); }
测试用例验证
我们来对应你的测试用例验证:
String S = "{U}":包含非括号字符'U',返回false,符合预期String S = "[U]":包含'U',返回false,符合预期String S = "U":全为非括号字符,返回false,符合预期String S = "([)()]":所有字符都是指定括号,返回true,符合预期
额外说明
如果你之后需要检查括号是否合法嵌套(比如"([)]"这种要返回false),那就要用栈来实现了,但根据你的测试用例,当前只需要检查字符是否属于指定集合,上面的正则就足够了。
内容的提问来源于stack exchange,提问作者Jim Clermonts
相关产品推荐
相关产品推荐

