等括号字符串的判断:
判断一个字符串 是否是 "等括号"字符串
等括号的含义
1).必须成对出现 有开始有结束 “()” “[]”
2).允许括号嵌套 “([])” “[{}([])]”
3).但是不允许单独嵌套 “{(})” “({[}])”
4).字符串中只有一共四种括号 () [] {} <>
题目: 要用户输入一个只包含这四种括号的字符串,我们判断该字符串是否是"等括号"字符串
代码如下:
public class Test02 {
public static void main(String[] args) {
System.out.println("请输入字符串");
String str = new Scanner(System.in).next();
while (str.length() != 0) { //输入的字符串长度肯定不为0,所以进入循环
int start = str.length();
str.replace("<>", "");
str.replace("[]", "");
str.replace("()", "");
str.replace("{}", "");
int end = str.length();
if (start == end) {
System.out.println("您输入的字符串为非等括号字符串");
return;
}
}
//以上的代码都执行完毕了,那就证明是等括号字符串,所以可以输出
System.out.println("您所输入的为等括号字符串");
}
}
代码思想如下:
public class Test {
public static void main(String[] args) {
System.out.println("请输入字符串");
String userinputstring = new Scanner(System.in).next(); //由用户输入
//用户输入完毕后,设置代码进行相关判断
//-->我需要判断用户输入的是不是等括号字符串,
//-->按照题目来讲,我们需要要判断用户输入的如果不是等括号字符串,该如何进行辨析。
//-->但是通过逆向思维,我先去判断用户输入的如果就是等括号字符串,
//-->再由等括号字符串所具有的的规律,反向推理,即符合等括号字符串的规律为等括号字符串,
//-->那么不符合括号字符串的规律的字符串就为非符合括号字符串!!
//-->随意书写一组符合规律的等括号字符串:"<[({})]>{<([])>}"。
//-->由上面可以看出来,符合规律的等括号字符串的中心,均为一个成对的括号,由此入手:
//-->利用字符串的方法replace,去依次消除中心的成对括号,
//-->当中心成对的括号被消除,会在中心出现新的成对括号,再次消除,等到所有中心成对括号消除完毕,
//-->因为是等括号的字符串,所有整个字符串也被消除完毕。即字符串的长度为0.
//代码实现
while (userinputstring.length() != 0) { //输入的字符串长度肯定不为0,所以进入循环,开始替换
int start = userinputstring.length();
userinputstring.replace("<>", ""); //-->将"<>",替换为"空"
userinputstring.replace("[]", ""); //-->将"[]",替换为"空"
userinputstring.replace("()", ""); //-->将"()",替换为"空"
userinputstring.replace("{}", ""); //-->将"{}",替换为"空"
int end = userinputstring.length();
if (start == end) {
System.out.println("您输入的字符串为非等括号字符串");
return;
}
}
//以上的代码都执行完毕了,那就证明是等括号字符串,所以可以输出
System.out.println("您所输入的为等括号字符串");
//如果当消除(替换)进行到非等括号字符串时,模拟如下{([)]}
//-->中心的为非等括号"[)",进入while循环时,无法被替换,所以由开始到结束,没有被替换,
//-->没有被替换长度也就相等(即长度是没有被替换的表现)
//-->所以需要设置条件,进入whlie循环时设置计算字符串长度 int start = userinputstring.length();
//-->结束whlie循环时,int end = userinputstring.length();
//-->当 start == end 时,则没有发生替换,那就可以判定为非等括号字符串了。
//代码实现如上
}
}
如果有什么疑问,欢迎留言,另外这道题的解题思路不止一种,如有您有想交流的,也请留言~~~~~~