括弧マッチングアルゴリズムの1つの正しい実装(java)
3795 ワード
本人は1つの文字列の中で括弧が対になって現れるかどうかを判断しなければならなくて、正則が満足できないかそれとも正規表現が複雑すぎて、Javaアルゴリズムで実現するしかないことを発見して、ネット上でいくつかのコードを探して、適当でないかを発見します。
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class matchJudger
{
// pair key,
private Map pair = null;
public matchJudger()
{
pair = new HashMap();
pair.put(')', '(');
pair.put('}', '{');
pair.put(']', '[');
}
public boolean isMatch(String s)
{
Stack sc = new Stack();
for (int i = 0; i < s.length(); i++)
{
Character ch = s.charAt(i);
if (pair.containsValue(ch))// ,
{
sc.push(ch);
} else if (pair.containsKey(ch)) //
{
if (sc.empty()) // ,
{
return false;
}
// ,
if (sc.peek() == pair.get(ch))
{
sc.pop();
} else // else , ({}[]]]) true
{ // ,
return false;
}
}
}
return sc.empty() ? true : false;
}
public static void main(String[] args)
{
matchJudger judger = new matchJudger();
System.out.println(judger.isMatch("(***)-[{-------}]")); //true
System.out.println(judger.isMatch("(2+4)*a[5]")); //true
System.out.println(judger.isMatch("({}[]]])")); //false
System.out.println(judger.isMatch("())))")); //false
}
}