相關介紹: 括弧分隔符匹配問題是指,判斷所輸入的字元串表達式中的括弧是否匹配的問題,例如1+(12+2)\ (1+2)便是一個括弧分隔符匹配的表達式,而(12+1) 4+(12/2]就是一個括弧分隔符不匹配的表達式 判斷一個表達式括弧分隔符是否匹配,其思路如下:依次讀取該表達 ...
相關介紹:
括弧分隔符匹配問題是指,判斷所輸入的字元串表達式中的括弧是否匹配的問題,例如1+(12+2)*(1+2)便是一個括弧分隔符匹配的表達式,而(12+1)*4+(12/2]就是一個括弧分隔符不匹配的表達式
判斷一個表達式括弧分隔符是否匹配,其思路如下:依次讀取該表達式中的相關字元,如果為數字或者運算符則繼續讀取下一個字元,當為左括弧的時候,將其壓入棧中,當為右括弧的時候,彈出棧頂元素,查看是否是右括弧所匹配的左括弧類型,如果不是則該表達式不是括弧匹配的,否則,重覆以上步驟,直至表達式中的每個字元遍歷完成,當遍歷完成的時候,若棧中元素不為空,則是括弧不匹配的,否則是括弧匹配的。
相關代碼如下:
package queueandstack;
import java.util.Scanner;
/**
* 該類用於實現對括弧的匹配問題的操作
* 用於判斷輸入的括弧是否匹配的問題
* @author 學徒
*
*/
public class Match
{
public void matchesSymbol()
{
boolean match=false;
Stack<String> stack=new Stack<String>();
System.out.print("請輸入一系列括弧:");
String inputString=null;
while(true)
{
inputString=getInputString();
if(inputString==null||deleteBlank(inputString).equals(""))
{
System.out.print("請輸入一系列括弧:");
continue;
}
else
{
break;
}
}
//去除空字元
inputString=deleteBlank(inputString);
//當括弧成對出現的時候
if(inputString.length()%2==0)
{
match=true;
for(int i=0;i<inputString.length();i++)
{
//當為左括弧時,將其壓入棧中,否則將從棧中彈出
if(String.valueOf(inputString.charAt(i)).matches("[((\\[{【]"))
{
stack.push(String.valueOf(inputString.charAt(i)));
}
else
{
if(!stack.isEmpty())
{
String value=stack.pop();
}
else
{
match=false;
break;
}
}
}
}
if(!match||!stack.isEmpty())
{
System.out.println("括弧不匹配");
}
else
{
System.out.println("括弧匹配成功");
}
}
//該方法用於獲得輸入的字元串
private String getInputString()
{
Scanner in =new Scanner(System.in);
String str=null;
if(in.hasNextLine())
{
str=in.nextLine();
}
return str;
}
//該方法用於對輸入的字元串進行去除空字元的處理
private String deleteBlank(String inputString)
{
inputString=inputString.replaceAll(" ", "");
return inputString;
}
}