java 使用栈匹配字符串符号

/**
 * 栈
 * Create by Administrator
 * 2018/6/11 0011
 * 上午 10:20
 **/
public class StackR {

    private int maxSixe;

    private char[] stackArray;

    private int top;

    public StackR(int s) {
        this.maxSixe = s;
        this.stackArray = new char[maxSixe];
        this.top = -1;
    }

    /**
     * 入栈
     * @param j
     */
    public boolean push(char j){
        if(isFull()){
            System.out.println("栈已满");
            return false;
        }else{
            this.stackArray[++top] = j;
            return true;
        }
    }

    /**
     * 出栈
     */
    public char pop(){
        return stackArray[top--];
    }

    /**
     * 查看
     * @return
     */
    public void peek(){
        System.out.println(stackArray[top]);
    }

    /**
     * 判断栈是否为空
     * @return
     */
    public boolean isEmpty(){
        return (top == -1);
    }

    /**
     * 判断栈是否满了
     * @return
     */
    public boolean isFull(){
        return (top == maxSixe-1);
    }
}

  

public class BracketChecher {

    private String input;

    public BracketChecher(String input) {
        this.input = input;
    }

    public void check(){
        int stackSize = input.length();
        StackR stackR = new StackR(stackSize);
        for (int i = 0; i < stackSize; i++) {
            char ch = input.charAt(i);
            switch (ch){
                case ‘{‘:
                case ‘[‘:
                case ‘(‘:
                    stackR.push(ch);
                    break;
                case ‘}‘:
                case ‘]‘:
                case ‘)‘:
                    if(!stackR.isEmpty()){
                        char chx = stackR.pop();
                        if(ch == ‘}‘ && chx != ‘{‘ || ch == ‘]‘ && chx != ‘[‘ || ch == ‘)‘ && chx != ‘(‘){
                            System.out.println("Error:"+ch+" at "+i);
                        }
                    }else{
                        System.out.println("Error:"+ch+" at "+i);
                    }
                default:
                    break;
            }
        }
        if(!stackR.isEmpty()){
            System.out.println("Error: missing right delimiter");
        }
    }

    public static String getString() throws IOException{
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String s = br.readLine();
        return s;
    }

    public static void main(String[] args) throws IOException {
        while(true){
            System.out.flush();
            String input = getString();
            BracketChecher b = new BracketChecher(input);
            b.check();
        }
    }

  测试控制台输入字符串:a{b(c]d}

  结果:Error:] at 3

原文地址:https://www.cnblogs.com/chancy/p/9167091.html

时间: 2024-10-31 06:34:47

java 使用栈匹配字符串符号的相关文章

java正则表达式取出匹配字符串

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ){ // 按指定模式在字符串查找 String line = "This order was placed for QT3000! OK?"; String pattern = "(\\D*)(\\d+)(.*)&q

JavaScript 匹配字符串偶数位置的字符 及匹配 $ 符号

已知一个字符串#####,现需要替换偶数位置的#为&. function replaceDemo(){ var s = "1#2#3#4#5#"; var regex = /#/g; var index = 1; s=s.replace(regex,function(){index++;return index%2?'&':arguments[0]}); return s; } 注释: 1.由于需要匹配整个字符串,因此政策表达式需要添加g参数. 2.index用于记录匹

java 匹配字符串中的中文个数

/*** 匹配字符串中有多少个中文* wangxq 2015年7月1日 16:18:52* @param recordStr* @return*/ public Integer parseRecordStr(String recordStr){ Integer countNum = 0; if(recordStr){ // 要匹配的字符串 String reg_charset ="[\\u4E00-\\u9FA5]"; Pattern p = Pattern.compile(reg_c

java技术栈

java技术栈 1 java基础: 1.1 算法 1.1 排序算法:直接插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序 1.2 二叉查找树.红黑树.B树.B+树.LSM树(分别有对应的应用,数据库.HBase) 1.3 BitSet解决数据重复和是否存在等问题 1.2 基本 2.1 字符串常量池的迁移 2.2 字符串KMP算法 2.3 equals和hashcode 1.equals方法用于比较对象的内容是否相等(覆盖以后) 2.hashcode方法只有在集合中

JAVA中用于处理字符串的“三兄弟”

JAVA中用于处理字符串常用的有三个类:java.lang.String.java.lang.StringBuffer.java.lang.StringBuilder,这三者的共同之处都是final类,不允许被继承,这主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着的,且考虑到防止其中的参数被修改影响到其它的应用.StringBuffer与StringBuilder两个基本上差不多,只是StringBuffer是线程安全,可以不需要额外的同步用于多线程中:StringBuilder是非

java关于split分割字符串,空的字符串不能得到的问题

java关于split分割字符串,空的字符串不能得到的问题 class T { public static void main(String args[]) { String num[] = new String[11]; String sLine = "101494|360103660318444|2008/06/17|周润英|1292.0|3085.76|2778.28|912.91|106.0|||"; num = sLine.split("\\|"); in

Java语言中的---字符串

day09 Java语言中的---字符串 一.字符串概述: 字符串在程序中是一个非常重要的知识点,在处理一系列程序的时候都会定义一些字符串来使用.下面我们就来看看如何定义和使用一个字符串. 二.字符串(String): 1.字符串的分类:字符串根据能否可以改变被分为常用的三种, (1)"String"类:这个类是Java本身自带的一个类,无需定义.可以直接使用,但是当你在操作这个类的时候你就可以直接创建实例.同时这也是一个不可变的类,也就是说你对某个字符串新增或者删除时,原来的这个字符

探究Java虚拟机栈

前言 Java 虚拟机的内存模型分为两部分:一部分是线程共享的,包括 Java 堆和方法区:另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存.今天我就 Java 虚拟机栈做一些比较浅的探究. 熟悉 Java 的同学应该都知道了,JVM 是基于栈的.但是这个"栈" 具体指的是什么?难道就是虚拟机栈?想要回答这个问题我们先要从虚拟机栈的结构谈起. 虚拟机栈 何为虚拟机栈虚拟机栈的栈元素是栈帧,当有一个方法被调用时,代表这个方法的栈帧入栈:当这个方法返回时,其栈帧

js正则表达式验证、匹配数字、匹配字符串、匹配中文、匹配任意字符备忘录

本文转自:91博客 :原文地址:http://www.9191boke.com/235792704.html 正则表达式或“regex”用于匹配字符串的各个部分,下面是我创建正则表达式的备忘录.包括一些常用的验证.匹配数字.匹配字符串.匹配中文.匹配任意字符串. 匹配正则 使用 .test() 方法 let testString = "My test string"; let testRegex = /string/; testRegex.test(testString); 匹配多个模