精华内容
下载资源
问答
  • java括号匹配算法

    千次阅读 2013-08-31 16:22:01
    java括号匹配算法 import java.util.Vector; class Stack{  private int cursor=0;  private int[] stackBody=new int[99];    Stack(){  cursor=0;  for(int i=0;i  stackBody[i]=...

    java括号匹配算法



    import java.util.Vector;

    class Stack{
     private int cursor=0;
     private int[] stackBody=new int[99];
     
     Stack(){
      cursor=0;
      for(int i=0;i<99;i++)
       stackBody[i]=-1;
     }
     public int getValue(){
      return stackBody[cursor];
     }
     public void push(int value){
      cursor++;
      stackBody[cursor]=value;
     }
     public void pop(){
      stackBody[cursor]=-1;
      cursor--;
      
     }
    }

    public class Test {
     
        
     private int left[]=new int[99];
     private int right[]=new int[99];
     private int counter=0;
     private Vector subReg=new Vector();
     private int pos=0;
     private int sublastIndex=0;
     
        
         
        public void getSubreg(String str){
       Stack temp=new Stack();
       while(pos<str.length()){
        if(pos==0){
         if(str.charAt(pos)=='('){
          left[counter++]=pos;
          temp.push(pos);
         }
        }
        if((pos>0)&&(str.charAt(pos-1)!='//')){
         if(str.charAt(pos)=='('){
          left[counter++]=pos;
          temp.push(pos);
         }
         else if(str.charAt(pos)==')'){
          for(int i=0;i<99;i++){
           if(left[i]==temp.getValue()){
            right[i]=pos;
               break;
           }
          }
          temp.pop();
         }
        }
        pos++;
       }
      
       for(int i=0;i<counter;i++)
         subReg.addElement(str.substring(left[i]+1, right[i]));
       System.out.println("result:"+subReg);
    }  
        public static void main(String []args){
         Test test=new Test();
         test.getSubreg("(z)((a+)?(b+)?(c))*");
         
        }
    }

    显示顺序非运算顺序,是正则表达式子式的顺序o(∩_∩)o...

    展开全文
  • 其中有一项就是括号匹配的检测。今天我们来谈一谈其中的原理。先上图图片发自简书App再上代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner;class Stack{ch...

    我们经常在各种IDE(集成开发环境)中敲代码。

    现在的IDE非常智能,并会给出相应提示,还有及时的错误提醒。

    其中有一项就是括号匹配的检测。

    今天我们来谈一谈其中的原理。

    先上图

    871df2d5c03d?utm_source=oschina-app

    图片发自简书App

    再上代码

    import java.io.BufferedReader;i

    mport java.io.InputStreamReader;

    import java.util.Scanner;

    class Stack{

    char [] data;int maxSize;//数组的长度int top;Scanner input=new Scanner(System.in);public Stack(int maxSize) {this.maxSize=maxSize;data=new char[maxSize];top=-1;

    /*注意:因为数组下标是从0开始的,一开始top为-1就表示栈为空。*/

    }

    public int getSize()

    {

    return maxSize;

    }

    public int getElementCount()

    {

    //得到栈顶元素标号

    return top;

    }

    public boolean isEmpty()

    //判断是否为空栈 {

    return top==-1;

    }

    public boolean isFull()

    {

    return top+1==maxSize;

    //数组下标从0开始,所以这里top要先加1

    }public boolean push(char data)

    {

    if(isFull()) {

    System.out.println("栈已满");

    return false;

    }

    this.data[++top]=data;/*这里的表达式(++top)的值是原来top+1 并且top的值从此已经加1,因为已经入栈了一次。* / return true;

    }

    public char pop() throws Exception

    {if(isEmpty())

    {

    throw new Exception("栈已空");

    }

    return this.data[top--];/*这里(top--)的值仍然是原来top的值,并且从此top的值已经减1。因为已经弹栈了一次。*/

    }public char peek()

    {//查看当前栈顶元素return this.data[getElementCount()];

    }

    public void pipei() throws Exception {char ch,temp;

    //定义输入的字符和接收弹出的字符变量int match;//是否匹配的标志BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));

    ch=(char)reader.read();

    while(ch!='0')

    {

    if(getElementCount()==-1)

    {

    push(ch);

    }else {

    temp=pop();//取出栈顶元素

    match=0;

    if(temp=='('&&ch==')')

    {

    match=1;

    }

    if(temp=='')

    {match=1;}

    if(temp=='{'&&ch=='}')

    {match=1;}

    if(temp=='['&&ch==']')

    {match=1;}

    if(match==0)

    {push(temp);push(ch);}

    /*注意,如果match为1,那么被取出的栈顶元素是不会被重新入栈的。*/

    }

    ch=(char)reader.read();

    }

    if(getElementCount()==-1)

    {

    System.out.println("匹配!");

    /*while循环结束后,判断栈是否为空,若为空说明每次取出栈顶的元素都与输入的括号相匹配 */}

    else

    {System.out.println("不匹配!");

    }

    }

    }

    public class bracketsMatchAlrogithm {/*这里为了简单,就直接在主函数中抛出异常,实际中不要这么做。* / public static void main(String[] args) throws Exception{String go;Scanner input=new Scanner(System.in);Scanner input2=new Scanner(System.in);System.out.println("请输入最大字符容量");Stack s=new Stack(input.nextInt());System.out.println("括号匹配");do {System.out.println("请输入一组括号组合,以0表示结束");s.pipei();System.out.println("继续?(y/n)");go=input.nextLine();}while(go.equalsIgnoreCase("y"));System.out.println("游戏结束");input.close();input2.close();}}

    以上内容是本人学习之后的总结,注释和画图均为本人所做,画图技术不好。。。难免粗糙,体谅一下,嘿嘿。

    另外,本人水平有限,难免有缺漏和不足,望各位大侠指出啊!thankyou very much

    展开全文
  • java 括号匹配算法

    2016-01-29 01:16:26
    最累的时候,家人是你最好的归宿。 算法的设计思想: 1. 依次扫描各个符号,凡出现左括弧,则进栈 ... 若栈空,则匹配正确, 否则表明左括号多了 例子中用到的栈是之前博客中用数组实现的栈 pac

    最累的时候,家人是你最好的归宿。


    算法的设计思想:

    1. 依次扫描各个符号,凡出现左括弧,则进栈

    2. 凡出现右括弧,首先检查栈是否空

        若栈空,则表明右括号多了

        否则和栈顶元素比较,若相匹配,则左括弧出栈, 否则匹配不正确

    3. 表达式检验结束时,

         若栈空,则匹配正确, 否则表明左括号多了


    例子中用到的栈是之前博客中用数组实现的栈




    展开全文
  • import java.util.Vector;class Stack{private int cursor=0;private int[] stackBody=new int[99];Stack(){cursor=0;for(int i=0;i<99;i++)stackBody[i]=-1;}public int getValue(){return stackBody[cursor];}p...

    import java.util.Vector;

    class Stack{

    private int cursor=0;

    private int[] stackBody=new int[99];

    Stack(){

    cursor=0;

    for(int i=0;i<99;i++)

    stackBody[i]=-1;

    }

    public int getValue(){

    return stackBody[cursor];

    }

    public void push(int value){

    cursor++;

    stackBody[cursor]=value;

    }

    public void pop(){

    stackBody[cursor]=-1;

    cursor--;

    }

    }

    public class Test {

    private int left[]=new int[99];

    private int right[]=new int[99];

    private int counter=0;

    private Vector subReg=new Vector();

    private int pos=0;

    private int sublastIndex=0;

    public void getSubreg(String str){

    Stack temp=new Stack();

    while(pos

    if(pos==0){

    if(str.charAt(pos)=='('){

    left[counter++]=pos;

    temp.push(pos);

    }

    }

    if((pos>0)&&(str.charAt(pos-1)!='//')){

    if(str.charAt(pos)=='('){

    left[counter++]=pos;

    temp.push(pos);

    }

    else if(str.charAt(pos)==')'){

    for(int i=0;i<99;i++){

    if(left[i]==temp.getValue()){

    right[i]=pos;

    break;

    }

    }

    temp.pop();

    }

    }

    pos++;

    }

    for(int i=0;i

    subReg.addElement(str.substring(left[i]+1, right[i]));

    System.out.println("result:"+subReg);

    }

    public static void main(String []args){

    Test test=new Test();

    test.getSubreg("(z)((a+)?(b+)?(c))*");

    }

    }

    显示顺序非运算顺序,是正则表达式子式的顺序o(∩_∩)o...

    展开全文
  • 其中有一项就是括号匹配的检测。今天我们来谈一谈其中的原理。先上图图片发自简书App再上代码import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Scanner;class Stack{ch...
  • 如何使用栈来判定括号是否匹配对于给定的表达式,可以使用栈来实现括号匹配判定,这个算法在编译器中非常重要,解析器每次读入一个字符,如果字符是一个开分隔符,如(,【,{,入栈,若读入的是闭分隔符),】,},...
  • Java括号匹配算法

    2020-04-22 21:45:19
    有效字符串满足:左括号必须同相同类型的右括号闭合:“{}”,"[]","()" 左括号必须以正确的顺序闭合 空字符串可被认为是有效字符串 思路是用栈这个数据结构 遍历字符串时判断:如果是左括号,那么我们将其入栈;...
  • 下面的代码用于判断一个串中的括号是否匹配 所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉 直接上代码 package myfirstprogram; import java.util.Stack; public class match_kuohao() { ...
  • 括号匹配算法题目来自网络搜集和常考算法,如有侵权请联系我题目描述给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()"和"()[]{}"都是...
  • 有效字符串需满足:左括号必须用相同类型的右...如果为右括号,我们先判断栈是否为空(有可能字符串刚开始就是一个右括号呢),为空的话直接返回false,不为空时判断:栈顶元素和下一个要入栈的元素是否相匹配,若匹...
  • 括号匹配算法-java实现import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Stack;public class BracketsMatch {public static void main(String[] args) throws Exception {...
  • 本文实例讲述了Java栈的应用之括号匹配算法。分享给大家供大家参考,具体如下:1、LeetCode官网美网:https://leetcode.com/中文网:https://leetcode-cn.com/英语不咋地,所以选择此处选择中文网来进行测试。2、...
  • 题目:检验符号是否匹配. '['和']', '('和')'成对出现时字符串合法. 例如"[][]()","[[([]([])()[])]]"是合法的; "([(])","[())"是不合法的.遍历字符串的每一个char, 将char与栈顶元素比较. 如果char和栈顶元素配对, ...
  • 基于JAVA括号匹配算法 public class Stack { private int size;//栈的大小 private int top;//栈顶元素下标 初始为-1 private char arr[];//定义数组为栈的容器 public Stack(int size){ arr=new char[size]...
  • 主要介绍了Java栈的应用之括号匹配算法,结合实例形式分析了Java使用栈实现括号匹配算法的相关原理、操作技巧与注意事项,需要的朋友可以参考下
  • java实现括号匹配算法

    2020-01-27 16:09:17
    import java.util.ArrayList; public class Stack { ArrayList<Character> list=new ArrayList<>(); public void push(Character s) { //将左括号压入栈中 list.add(s); } public void...
  • 括号匹配算法java实现

    2019-11-02 09:26:07
    括号匹配算法: package com.jintao.example.algorithm; import java.util.HashMap; import java.util.Map; import java.util.Stack; /** * @author jinjueYang * @description 括号匹配 * @date 2019/11/2 9...
  • 括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(...
  • import java.util.*;public class Main {/***@param args*/public static void main(String[] args) { // class1 obj=new class1();// class2 obj1=new class2();// obj.Print(300);// System.out.println();// obj1...
  • 括号匹配算法Java实现

    千次阅读 2019-04-22 10:20:13
    **描述:**给定一个字符串,其中的字符只包含三种括号:花括号{ ...括号匹配要求括号必须以正确的顺序配对,如 “{ [ ] ( ) }” 或 “[ ( { } [ ] ) ]” 等为正确的格式,而 “[ ( ] )” 或 “{ [ ( ) }” 或 “( { ...
  • 括号匹配算法

    2013-07-29 11:23:34
    括号匹配算法-java实现import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Stack; public class BracketsMatch { public static void main(String[] args) throws Exce...
  • public static void main(String[] args) { String str = "([])"; String st3 = "([)]"; String str2 = "(([]){})"; String st = "()[]{}"; String sttt ="]";... String sssss = "){";...
  • 这篇文章讲述的是数据结构部分的括号匹配算法java实现,如有错误或者不当之处,还望各位大神批评指正。 问题描述 假设一个表达式中允许包含两种括号圆括号()和方括号[],其嵌套的顺序随意,及()等正确格式,[(]...
  • 对于给定的表达式,可以使用栈来实现括号匹配判定,这个算法在编译器中非常重要,解析器每次读入 一个字符,如果字符是一个开分隔符,如(,【,{,入栈,若读入的是闭分隔符),】,},出栈,如果两者匹配,继续解析...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 182
精华内容 72
关键字:

java括号匹配算法

java 订阅