Java数据结构:栈解决分隔符匹配问题

  分隔符匹配问题:编写判断Java程序中分隔符是否匹配的程序。Java程序中有以下分隔符:圆括号“(”和“)”,方括号“[”和“]”,大括号“{”和“}”以及注释分隔符“/*”和“*/”

public class Example3_1 {
	private static final int LEFT = 0;// 记录分隔符为"左"分隔符

	private static final int RIGHT = 1;// 记录分隔符为"右"分隔符

	private static final int OTHER = 2;// 记录其他字符

	// 判断分隔符的类型,有三种"左"、"右"、"非法"
	public int verifyFlag(String str) {
		if ("(".equals(str) || "[".equals(str) || "{".equals(str)
				|| "/*".equals(str))// 左分隔符
			return LEFT;
		else if (")".equals(str) || "]".equals(str) || "}".equals(str)
				|| "*/".equals(str))// 右分隔符
			return RIGHT;
		else
			// 其他字符
			return OTHER;
	}

	// 匹配左分隔符str1和右分隔符str2,是否匹配
	public boolean matches(String str1, String str2) {
		if (("(".equals(str1) && ")".equals(str2))
				|| ("[".equals(str1) && "]".equals(str2))
				|| ("{".equals(str1) && "}".equals(str2))
				|| ("/*".equals(str1) && "*/".equals(str2)))// 匹配规则
			return true;
		else
			return false;
	}

	private boolean isLegal(String str) throws Exception {
		if (!"".equals(str) && str != null) {
			SqStack S = new SqStack(100);// 新建最大存储空间为100的顺序栈
			int length = str.length();
			for (int i = 0; i < length; i++) {
				char c = str.charAt(i);// 指定索引处的 char 值
				String t = String.valueOf(c);// 转化成字符串型
				if (i != length) {// c不是最后一个字符
					if (('/' == c && '*' == str.charAt(i + 1))
							|| ('*' == c && '/' == str.charAt(i + 1))) {// 是分隔符"/*"或"*/"
						t = t.concat(String.valueOf(str.charAt(i + 1)));// 与后一个字符相连
						++i;// 跳过一个字符
					}
				}
				if (LEFT == verifyFlag(t)) {// 为左分隔符
					S.push(t);// 压入栈
				} else if (RIGHT == verifyFlag(t)) {// 为右分隔符
					if (S.isEmpty() || !matches(S.pop().toString(), t)) {// 右分隔符与栈顶元素不匹配
						throw new Exception("错误:Java语句不合法!");// 输出异常
					}
				}
			}

			if (!S.isEmpty())// 栈中存在没有匹配的字符
				throw new Exception("错误:Java语句不合法!");// 输出异常

			return true;
		} else
			throw new Exception("错误:Java语句为空!");// 输出异常
	}

	public static void main(String[] args) throws Exception {
		Example3_1 e = new Example3_1();
		System.out.println("请输入分Java语句:");// 输出
		Scanner sc = new Scanner(System.in);
		if (e.isLegal(sc.nextLine()))
			System.out.println("Java语句合法!");// 输出
		else
			System.out.println("错误:Java语句不合法!");// 输出
	}
}

 

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/qq_42192693/article/details/82417253
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞