java括号匹配中的 java判断数组是否越界越界 求大神解答 ,急急急 !!!

拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3baa032fa7b243a1-ua98).
重新安装浏览器,或使用别的浏览器1377人阅读
Java数据结构(1)
Java实现括号匹配
利用Java的Stack实现括号匹配,包括是否成对出现以及是否正确嵌套。
例如:( ) , { } , [ ] , ( { } [ ] )为正确嵌套,) } , ( { ) } , ( { [ } ] )为非正确嵌套。
以下为实现代码:
import java.util.Scanner
import java.util.Stack
public class SymbolMatch {
public static void main(String[] args) {
Stack&Character& stack = new Stack&Character&()
Scanner sc = new Scanner(System.in)
while (sc.hasNext()) {
String target = sc.nextLine()
char[] bytes = target.toCharArray()
// 将第一个字符压入栈
stack.push(bytes[0])
for (int i = 1
Character c1 = (Character) stack.peek()
Character c2 = bytes[i]
if ((c1.toString().equals("(") && c2.toString().equals(")"))
|| (c1.toString().equals("[") && c2.toString().equals("]"))
|| (c1.toString().equals("{") && c2.toString().equals("}"))) {
stack.pop()
stack.push(c2)
boolean isMatch = stack.isEmpty()
System.out.println("栈内内容:" + stack)
System.out.println("括号匹配结果:" + isMatch)
sc.close()
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3555次
排名:千里之外
原创:14篇
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'堆栈应用——括号匹配问题 - CSDN博客
堆栈应用——括号匹配问题
假设一个算术表达式中包含圆括号()、方括号[]和花括号{}三类括号,要求判断表达式中括号是否正确匹配配对。
分析:括号匹配符号后到的括号要最先被匹配,所以满足栈“后进先出”的特点。
括号匹配共有四种情况:(1)左右括号配对次序不正确,即存在类似“(]”这种情况;(2)右括号多于左括号;(3)左括号多于右括号;(4)匹配正确。
综上:我们可以存储表达式的字符串并按顺序扫描,进行匹配。顺序栈和链式堆栈都可以;
下面看代码:(不再构造栈类,上篇有)
package StackAndQ
* @author sun
* 创建时间:日下午2:52:31
public class BraceMatch {
//遍历字符数组并利用进栈出栈匹配括号
static void expIsCorrect(String[] exp,int n)throws Exception{
SeqStack myStack = new SeqStack();
//LinStack myStack = new LinStack(); //也可以用链式堆栈
for(int i=0;i&n;i++){//如果是左括号就入栈
if((exp[i].equals(new String(&(&)))
|| (exp[i].equals(new String(&[&)))
|| (exp[i].equals(new String(&{&))))
myStack.push(exp[i]);
//如果是右括号)并且和栈顶(匹配,出栈
else if((exp[i].equals(new String(&)&))) && myStack.notEmpty()
&& myStack.getTop().equals(new String(&(&)))
myStack.pop();
//遍历的右括号)和栈顶不匹配,说明公式错误,结束遍历
else if((exp[i].equals(new String(&)&))) && myStack.notEmpty()
&& !myStack.getTop().equals(new String(&(&))){
System.out.println(&左右括号匹配次序不正确!&);
//如果是右括号]并且和栈顶[匹配,出栈
else if((exp[i].equals(new String(&]&))) && myStack.notEmpty()
&& myStack.getTop().equals(new String(&[&)))
myStack.pop();
//遍历的右括号]和栈顶不匹配,说明公式错误,结束遍历
else if((exp[i].equals(new String(&]&))) && myStack.notEmpty()
&& !myStack.getTop().equals(new String(&[&))){
System.out.println(&左右括号匹配次序不正确!&);
//如果是右括号}并且和栈顶{匹配,出栈
else if((exp[i].equals(new String(&}&))) && myStack.notEmpty()
&& myStack.getTop().equals(new String(&{&)))
myStack.pop();
//遍历的右括号}和栈顶不匹配,说明公式错误,结束遍历
else if((exp[i].equals(new String(&}&))) && myStack.notEmpty()
&& !myStack.getTop().equals(new String(&{&))){
System.out.println(&左右括号匹配次序不正确!&);
//如果栈已空,但还存在右括号,说明右括号多了
else if((exp[i].equals(new String(&)&)))
|| (exp[i].equals(new String(&]&)))
|| (exp[i].equals(new String(&}&)))
&& !myStack.notEmpty()){
System.out.println(&右括号多余左括号!&);
//遍历完成后栈内还有元素,说明左括号多了
if(myStack.notEmpty())
System.out.println(&左括号多余右括号!&);
System.out.println(&括号匹配正确!&);
private static String[] strToString(String str){//把字符串转换为String类型数组
//为什么不转换为字符数组char[]呢?
//因为只有String类型的数据才具有可比性,也就是能用equals
int n = str.length();
String[] a = new String[n];
for(int i=0;i&n;i++){
a[i] = str.substring(i,i+1);//取子串含头不含尾,故可以取出i位置的字符并返回字符串类型
public static void main(String[] args) {
str = &(())abc{[}(){&;//左右括号匹配次序不正确
n = str.length();
String[] a = strToString(str);
expIsCorrect(a,n);
str = &(()))abc{[]}&;//右括号多余左括号
n = str.length();
String[] b = strToString(str);
expIsCorrect(b,n);
str = &(()()abc{[]}&;//左括号多余右括号
n = str.length();
String[] c = strToString(str);
expIsCorrect(c,n);
str = &(())abc{[]}&;//括号匹配正确!
n = str.length();
String[] d = strToString(str);
expIsCorrect(d,n);
catch(Exception e){
System.out.println(e.getMessage());
左右括号匹配次序不正确!
右括号多余左括号!
左括号多余右括号!
括号匹配正确!
本文已收录于以下专栏:
相关文章推荐
int main ()
我们都知道,栈(stack)具有后进先出的特点,所以在我们思考一个表达式中的左右括号是否匹配问题时,就自然会想到是不是可以利用栈的特点来判断左右括号是否匹配呢?
主要思路如下:
1.扫描整个表达式;...
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和...
题目 - 扩号匹配问题
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算术式子一样)任何一个左括号都从内到...
在编写程序的过程中,我们经常需要对一串括号是否匹配进行判断。如何判断呢?我们可以借助栈来进行判断。基本思路是:遍历字符串,当发现有右括号而此时的栈顶元素又恰好是与之匹配的左括号时,则栈顶元素出栈;其余...
算法:检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。
一.题目描述
假设一个表达式或一段程序中含有三种括号:圆括号“(”和“)”、方括号“[”和“]”、花括号“{”和“}”。试写一个程序判别给定的表达式或程序中所含括号是否正确配对出现。
输入说明:
...
栈结构具有后进先出的固有特性,在程序设计中很有帮助。这里举一个例子,将栈应用与括号匹配的检验。
假设表达式中允许三种括号:小括号、中括号和大括号,嵌套的顺序任意。( [ ] ) { ...
判读括号是否匹配的方法比较简单,假如给定一系列的括号,判断是否全部都匹配我们肯定是将能匹配的括号全部删除,如果最后没有剩下任何括号那么肯定就是匹配了;如有剩下的左括号或者右括号说明不匹配。
1.利用栈判断括号是否匹配
1.判断表达式中的括号是否匹配
#define maxSize 1000
typedef struc...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Java:这里匹配小括号时,为什么用了两个反斜线呢。用一个表示转义不就行了吗_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
Java:这里匹配小括号时,为什么用了两个反斜线呢。用一个表示转义不就行了吗
public class Demo {
public static void main(String
str = &ROM 20GB
RAM 5GB(20%)&;
//截取&()&之间的百分数
result = str.split(&\\(&)[1].split(&\\)&)[0];
System.out.println(r...
我有更好的答案
split是正则表达式,两个//才能代表正则表达式。
采纳率:56%
两个斜杠在字符串中是一个斜杠,应该是正则中的()需要转义。
转义斜杠再转义括号
为您推荐:
其他类似问题
等待您来回答

我要回帖

更多关于 java数组越界异常 的文章

 

随机推荐