分隔符匹配问题:编写判断java语句中分隔符是否匹配的程序。
一个分隔符和它匹配的分隔符可被其他的分隔符隔开,即分隔符允许嵌套,因此一个分隔符只有在其前面的所有右分隔符都被匹配后才可以进行匹配。
例如,条件语句: if ( i != (n[8] +1 ))中,第一个左圆括号必须与最后一个右圆括号相匹配,但是这只能在第二个左圆括号与倒数第二个右圆括号相匹配后才能进行;而第二个括号的匹配也只有在第三个左方括号与倒数第三个右方括号相匹配后才能进行。
可见,最先出现的左分隔符要在最后才能进行匹配,这个处理与栈式结构的先进后出特征吻合。
分隔符匹配算法如下:
从左到右扫描java语句,从语句中不断的读取字符,每次读取一个字符,若发现它是分隔符,则将其压入栈中;当从输入中读到第一个右分隔符时,则弹出栈顶的左分隔符,并且判断其是否和右分隔符匹配,若不匹配,则匹配失败,程序报错;若栈中没有左分隔符与右分隔符匹配(即栈为空),或者一直存在没有被匹配的左分隔符,左分隔符没有被匹配,表现为把所有的元素都读入后,栈中仍然有分隔符,则匹配失败,程序报错;若所有的字符读入结束后,栈为空,则表示匹配成功。
package com.stackTest;
import java.util.Scanner;
import javax.swing.text.AbstractDocument.LeafElement;
public class Separator
{
private final int LEFT = 0; //记录分隔符为“左”分隔符
private final int RIGHT=1 ;