K:括弧分隔符匹配問題

来源:https://www.cnblogs.com/MyStringIsNotNull/archive/2018/01/05/8206830.html
-Advertisement-
Play Games

相關介紹:  括弧分隔符匹配問題是指,判斷所輸入的字元串表達式中的括弧是否匹配的問題,例如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;
    }
}

回到目錄|·(工)·)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文目錄:1.等待、喚醒機制的原理2.Lock和Condition3.單生產者單消費者模式4.使用Lock和Condition實現單生產單消費模式5.多生產多消費模式(單麵包)6.多生產多消費模式 生產者消費者模式是多線程中最為常見的模式:生產者線程(一個或多個)生成麵包放進籃子里(集合或數組),同 ...
  • 一. 傳統C++ 傳統 C++中,普通數組、沒有構造析構和虛函數的類或結構體都可以使用 {} 進行初始化,也就是我們所說的初始化列表。而對於類對象的初始化,要麼需要通過拷貝構造、要麼就需要使用 () 進行,不支持{}。 int arr[3] = { 1,2,3 }; // 列表初始化class Fo... ...
  • 基於範圍的 for 迴圈 C++11 引入了基於範圍的迭代寫法,我們擁有了能夠寫出像 Python 一樣簡潔的迴圈語句: int array[] = { 1,2,3,4,5 };for (auto &x : array){std::cout arr(5, 100);for (auto &i : ar... ...
  • DBUtils工具包 一.介紹 DBUtils是Apache組織開源的資料庫工具類。 二.使用步驟 ①.創建QueryRunner對象 ②.調用update()方法或者query()方法執行sql語句 三.構造方法及靜態方法 QueryRunner類 1.構造方法 ①.無參構造 QueryRunne ...
  • 我們在Java容器中談到:有哈希表(也稱為散列表)支持的HashMap、LinkedHashSet等都具有非常高的查詢效率。這其中就是Hash起的作用。順序查找的時間複雜度為O(N) ,二分查找和查找樹的時間複雜度為O(logN),而 哈希表的時間複雜度為O(1) 。不過這隻是理想狀態,實際並不那麼 ...
  • python選修課學習中練手寫的,主要就是查詢bilibili提供得api 整理結果csv https://pan.baidu.com/s/1jHX2fJ4 ...
  • JDK1.8中的HashMap實現跟JDK1.7中的實現有很大差別。下麵分析JDK1.8中的實現,主要看put和get方法。 構造方法的時候並沒有初始化,而是在第一次put的時候初始化 putVal方法的主要邏輯是這樣的: 1、如果數組還沒有初始化(數組長度是0),則先初始化 2、通過hash方法計 ...
  • 方法和c++中的函數類似,區別在於java的方法定義不限位置,而c++中的定義在主函數後面的函數調用前要聲明: 求矩形面積方法示例: 輸出:面積是:30 調用過程分析: 1.從main進入,開始執行程式 2.調用getArea方法,傳遞參數,得到返回值 3.輸出 調用過程記憶體分析: 1.程式運行時期 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...