栈是软件系统应用最广泛的数据结构之一,只要涉及先进后出的处理特征都可以使用栈结构。

例如:函数递归调用中的地址和参数值的保存,文本编辑器中序列的保存,在编译软件设计中的括号匹配及表达式求值,网页访问历史的记录保存

下面通过讨论及格栈式结构的具体应用来说明栈在解决实际问题中的运用:

(一)判断分隔符是否合理

算法如下:

从左到右扫描java语句,不断读出java字符,若读出为左字符,则将其写入栈中,若读出为右字符,则将栈中左字符pop出并匹配,若不匹配或者没有左字符与右字符匹配,

则程序报错

把java语句读完后,若栈仍不为空,(没有右字符与栈中左字符匹配),则程序报错;若栈为空,则表示程序正常

import java.util.Scanner;

import java.util.Stack;

//判断分隔符匹配问题

public class Example3_1 {

private final int LEFT=0;

private final int RIGHT=1;

private final int OTHER=2;

//判断分隔符类型,有左,右,不合法三红类型

public int verifyFlag(String str){

if("(".equals(str)||"[".equals(str)||"{".equals(str)||"/*".equals(str))

{return LEFT;}

else if(")".equals(str)||"]".equals(str)||"}".equals(str)||"*/".equals(str)){

return RIGHT;

}

else

return OTHER;

}

//判断左右分隔符是否匹配

public boolean match(String str1,String str2){

if("(".equals(str1)&&")".equals(str2)||"[".equals(str1)&&"]".equals(str2)||

"{".equals(str1)&&"}".equals(str2)||"/*".equals(str1)&&"*/".equals(str2)){

return true;

}

else

return false;

}

//判断左右分隔符是否匹配

public boolean isLegal(String str) throws Exception{

if(!"".equals(str)&&str!=null){

//新建最大储存空间为100的顺序栈

Stack stack=new Stack<>();

int length=str.length();

//判断是否为/* 或者*/,如果是将其放入t中

for(int i=0;i

char c=str.charAt(i);//将索引到的元素转换为char类型

String t=String.valueOf(c);//将char类型转换为String类型

if(i!=length){

if(('/'==c&&'*'==str.charAt(i+1))||'*'==c&&'/'==str.charAt(i+1)){

t=t.concat(String.valueOf(str.charAt(i+1)));//将其连接成String类型

++i;

}

}

if(LEFT==verifyFlag(t)){

stack.push(t); //如果为左分隔符,则放入栈中

}

else if(RIGHT==verifyFlag(t)){

//如果为右分隔符

if(stack.isEmpty()||!match(stack.pop(), t)){

throw new Exception("错误,java语句不合法");

}

}

}if(!stack.isEmpty()){

throw new Exception("错误,java语句不合法");

}

return true;

}

else throw new Exception("错误,java语句为空");

}

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

Example3_1 e=new Example3_1();

System.out.println("请输入java语句");

Scanner sc=new Scanner(System.in);

if(e.isLegal(sc.nextLine())){

System.out.println("java语句合法");

}else

System.out.println("java语句不合法");

}

}运行结果如下:

请输入java语句

a=(a+c(d*e)*f+sa;

Exception in thread "main" java.lang.Exception: 错误,java语句不合法

at stack.Example3_1.isLegal(Example3_1.java:59)

at stack.Example3_1.main(Example3_1.java:74)

请输入java语句

a+(c+d)*d

java语句合法

java判断栈空_java中栈的应用-判断分隔符是否合理相关推荐

  1. java 日期是否合法_java 中 Date 类型快判断日期是否合法.

    // 如果日期不合法,则抛异常try {String date_str = 5555-22-33;SimpleDateFormat format=new SimpleDateFormat(yyyy-M ...

  2. java map 为空_java中如何判断map是否为空

    java中判断map是否为空的方法是:可以利用isEmpty()函数来判断.isEmpty()函数是java中用于判断某种容器是否有元素的系统库函数,例如用来判断ArrayList.HashSet.H ...

  3. java map怎么判断为空_java中如何判断map是否为空

    java中判断map是否为空的方法是:利用isEmpty()函数来判断. (推荐学习:java入门程序) 函数介绍: IsEmpty()是Java中用于判断某种容器是否有元素的系统库函数.如用来判断A ...

  4. java 判断时间合法_java 中 Date 类型快判断日期是否合法.

    // 如果日期不合法,则抛异常 try { String date_str = "5555-22-33"; SimpleDateFormat format=new SimpleDa ...

  5. java中的列表栈链表_Java数据结构(栈,队列,双链表)

    (1)栈package ChapterOne; public class Stack { //栈数组 long stackArr[]; //栈的大小 int maxSize; //栈的顶部 int t ...

  6. java中栈和堆都存哪些东西_java中栈内存与堆内存(JVM内存模型)

    java中栈内存与堆内存(JVM内存模型) Java中堆内存和栈内存详解1 和 Java中堆内存和栈内存详解2 都粗略讲解了栈内存和堆内存的区别,以及代码中哪些变量存储在堆中.哪些存储在栈中.内存中的 ...

  7. java 栈 先进后出_java中的stack

    stack为ADT中的一种数据结构,该结构特点是先进后出,Stack继承了Vector,Vector继承了AbstractList类,由此可见Stack也是集合.他的实现方法一般有两种: 一种为单链表 ...

  8. java堆和客栈_JAVA中堆、栈,静态方法和非静态方法的速度问题

    一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆 ...

  9. java判断集合为空_Java中判断集合类为空的方法

    *****需要引入Spring的核心Jar包***** 工具类: org.springframework.util.CollectionUtils 方法: public static boolean ...

最新文章

  1. 便携式不锈钢管道焊接机器人_不锈钢管道焊接工艺
  2. Docker 私有仓库 Harbor registry 安全认证搭建 [Https]
  3. Centos部署YApi
  4. 多线程环境下调用 HttpWebRequest 并发连接限制
  5. SQL Server 使用OPENROWSET访问ORACLE遇到的各种坑总结
  6. MonoBehaviour常用方法
  7. 简单分布式系统构建知识
  8. getUrlParam,jQuery中的URL参数获取
  9. PLC编程过程中需要注意的事项
  10. 《Shell脚本学习指南》
  11. 中小企业财务管理的重要性
  12. visio_连接线样式设置:如箭头线
  13. 用matlab实现灰色预测gm11模型,用MATLAB实现灰色预测GM11模型
  14. html 时间控件滚动选择器,TimePicker
  15. 计算机管理恢复分区,如何在Windows10中删除磁盘管理器中的恢复分区
  16. 《羊了个羊》谁还在玩我笑他两年半
  17. 算法题打卡-超人进化(剑指offer第一天)
  18. 深入浅出空间曲线的切线方程和法平面方程
  19. 互联网到底怎么连接的?一张图告诉你
  20. Tomcat调优指南

热门文章

  1. StatQuest-对RNA-seq的介绍
  2. 【多标签文本分类】Semantic-Unit-Based Dilated Convolution for Multi-Label Text Classification
  3. 【JVM】类加载器:双亲委派机制、沙箱安全机制
  4. 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
  5. 操作系统 进程调度-银行家算法实验报告
  6. 车道检测--VPGNet: Vanishing Point Guided Network for Lane and Road Marking Detection and Recognition
  7. 人群密度估计--Fully Convolutional Crowd Counting On Highly Congested Scenes
  8. 【pytorch】nn.conv1d的使用
  9. 【matlab】meshgrid的使用
  10. LeetCode 102. Binary Tree Level Order Traversal--递归,迭代-Python,Java解法