2

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

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

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

简而言之,它就像:“检查这些字符是否构成正确的开闭对”。例如:

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

你会说:“只需编写一个正则表达式人!!!” 使用一些 Internet 帮助,例如:

正则表达式匹配外括号正则
表达式使用 C#正则表达式
和括号文章限制仅出现一次左括号和右括号

你是对的,但是......这个问题对我来说很困难,因为函数可以将一些外来字符作为参数(UTF-8 编码),如日语、土耳其语、阿拉伯语等。我不知道哪些字符可以被视为开放- 其他语言(文化)中的紧密配对,所以我正在寻找一个可以解决我的问题的库。

问题:您知道任何对我的情况有帮助的图书馆吗,或者您有任何处理它的技巧吗?

4

2 回答 2

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;
}
于 2013-04-28T14:44:13.883 回答
1

为了完整起见,以下是使用 regexp 执行此操作的方法:

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

但我会使用地图来完成,如 ARS 的回答所示。

关于您的实际问题,我不知道是否有图书馆,我不认为例如。unicode 有一些巧妙的方法来确定这对。因此,您最好的选择可能是使用 map 方法,并自己对这些对进行硬编码,可能来自此 Wikipedia 页面中的列表

于 2013-04-28T14:46:33.390 回答