检查相应的打开/关闭“括号”的方法

时间:2013-04-28 14:40:25

标签: java regex libraries brackets

我正在编写一个示例应用程序,其中我遇到了以下问题:

我必须检查字符的“兼容性”。

boolean checkIfPairCorrect(Character c1, Character c2) {...}

简而言之,它似乎是:“检查这些角色是否形成正确的开 - 关”。 例如:

配对“(”和“)”返回TRUE
对“{”和“}”返回TRUE
对“(”和“}”返回FALSE //不兼容的括号
配对“)”和“(”返回FALSE //错误的订单
对“a”和“3”返回FALSE //'a'或'3'不是可以找到“关闭”字符的字符

你会说:“只需写一个正则表达式的人!!!”使用一些互联网帮助,如:

Regular Expression to match outer brackets
Regex to restrict only one occurrence of open and close brackets using C#
Regexp and brackets article

你会是对的,但...... 这个问题对我来说很难,因为函数可以使用一些奇特的字符作为参数(UTF-8编码),如日语,土耳其语,阿拉伯语等。我不知道在其他语言(文化)中哪些字符可以被视为开放式对,所以我正在寻找一个可以处理我问题的图书馆。

问题:您是否知道任何可能对我的案件有帮助的图书馆,或者您是否有任何提示如何处理它?<​​/ em>

2 个答案:

答案 0 :(得分:3)

为什么没有这样的地图:

Map<Character, Character> pairs = new HashMap<Character, Character>();
pairs.put('(', ')');
pairs.put('{', '}');
pairs.put('[', ']');
...

那么你的方法可能是

boolean checkIfPairCorrect(char c1, char c2) {
    return pairs.get(c1) == c2;
}

答案 1 :(得分:1)

为了完整起见,请参阅regexp:

boolean checkIfPairCorrect(Character c1, Character c2) {
    String str = c1.toString() + c2.toString();
    return str.matches(
          "(\\[\\])"
       + "|(\\(\\))"
       + "|({})"
       // ... add any more you may want 
       );
}

但我会用地图来做,如A.R.S的答案所示。

关于你的实际问题,我不知道是否有图书馆,我也不会想到。 unicode有一些巧妙的方法来确定这对。所以你最好的选择可能是使用map方法,并自己对这些对进行硬编码,可能来自the list in this Wikipedia page