java实现判断字符串中大中小括号是否成对匹配,()[]{}都可以
程序员文章站
2022-04-06 15:14:13
实现逻辑:1、将字符串的每个字符进行遍历2、如果发现是左括号,那么将该字符压入到栈中3、如果是右括号,先去存储好的栈顶找到相应的值4、若栈为空返回false,若匹配,pop该左括号,若不匹配也返回false5、最后看存储栈中的做括号是否都匹配上了,也就是栈最后为空,返回true,否则返回falsepackage com.test;import java.util.Stack;/** * @author rohin * @version 创建时间:2020年12月30日 下午9:51:...
实现逻辑:
1、将字符串的每个字符进行遍历
2、如果发现是左括号,那么将该字符压入到栈中
3、如果是右括号,先去存储好的栈顶找到相应的值
4、若栈为空返回false,若匹配,pop该左括号,若不匹配也返回false
5、最后看存储栈中的做括号是否都匹配上了,也就是栈最后为空,返回true,否则返回false
package com.test;
import java.util.Stack;
/**
* @author rohin
* @version 创建时间:2020年12月30日 下午9:51:50
* 类说明
*/
public class BracketsMatch {
public static void main(String[] args) {
System.out.println(BracketsMatch.partenMatch("()()=9"));
System.out.println(BracketsMatch.partenMatch("(){}[]"));
System.out.println(BracketsMatch.partenMatch("{[()]}"));
System.out.println(BracketsMatch.partenMatch("[{()]}"));
}
public static boolean partenMatch(String str) {
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i)) {
case '{':
case '(':
case '[':
stack.push(str.charAt(i));
break;
case '}':
case ')':
case ']':
if (stack.isEmpty())
return false;
if (!matchCheck(stack.pop(), str.charAt(i)))
return false;
break;
}
}
if (!stack.isEmpty())
return false;
return true;
}
public static boolean matchCheck(char strRight, char strLeft) {
switch (strRight) {
case '{':
if (strLeft == '}')
return true;
break;
case '(':
if (strLeft == ')')
return true;
break;
case '[':
if (strLeft == ']')
return true;
break;
default:
break;
}
return false;
}
}
输出内容如下:
true
true
true
false
第二种方法:
package com.test;
import java.util.Stack;
public class Check {
public static void main(String[] args) {
String s = "{}([)]";
Stack<Character> sc = new Stack<Character>();
char[] c = s.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == '(' || c[i] == '[' || c[i] == '{') {
sc.push(c[i]);
} else if (c[i] == ')') {
if (sc.peek() == '(') {
sc.pop();
}
} else if (c[i] == ']') {
if (sc.peek() == '[') {
sc.pop();
}
} else if (c[i] == '}') {
if (sc.peek() == '{') {
sc.pop();
}
}
}
if (sc.empty()) {
System.out.println("成对");
} else {
System.out.println("不成对");
}
}
}
本文地址:https://blog.csdn.net/lubin100/article/details/111998829