Java 如何使用堆栈检查字符串
我有一些具体的任务。我们有类似字符串的“(()[])”或类似于此的东西。我采访中的一个问题是如何检查字符串是否正确。例如:“([])”-true,“([)”-false,“[(])”-false,“([])”-true。非常感谢你们! 我不能接受我的代码有什么问题。 谢谢大家!!! 请帮忙 导入java.util.Stack 公开课考试{Java 如何使用堆栈检查字符串,java,Java,我有一些具体的任务。我们有类似字符串的“(()[])”或类似于此的东西。我采访中的一个问题是如何检查字符串是否正确。例如:“([])”-true,“([)”-false,“[(])”-false,“([])”-true。非常感谢你们! 我不能接受我的代码有什么问题。 谢谢大家!!! 请帮忙 导入java.util.Stack 公开课考试{ public static void main(String[] args) { String line = "(<>()[])";
public static void main(String[] args) {
String line = "(<>()[])";
Test test = new Test();
boolean res = test.stringChecker(line);
System.out.println(res);
}
public boolean stringChecker(String line){
boolean result = false;
char letter = '\u0000';
char[] arr = line.toCharArray();
Stack<Character> stack = new Stack();
for (int i = 0; i < arr.length; i++) {
if (arr[i] == '(' || arr[i] == '[' || arr[i] == '<') {
stack.push(arr[i]);
}
if(arr[i] == ')' || arr[i] == ']' || arr[i] == '>'){
if(stack.peek() == arr[i]){
result = true;
stack.pop();
}
}
}
return result;
}
publicstaticvoidmain(字符串[]args){
字符串行=“(()[])”;
测试=新测试();
布尔res=test.stringChecker(行);
系统输出打印项次(res);
}
公共布尔字符串检查器(字符串行){
布尔结果=假;
字符字母='\u0000';
char[]arr=line.toCharArray();
堆栈=新堆栈();
对于(int i=0;i
}(0)您正在推<(和{但在您的窥视中,您正在检查>,)和}
(1) 第一次成功匹配时,您将以结果false开始,并将其设置为true。相反,您应该以结果true开始,并在第一次失败匹配时将其设置为false
(2) 当字符用完时,应检查堆栈是否为空
(3) 在偷看之前,应该检查堆栈是否为空
(4) 您可能需要检查不需要的字符。除了@TheodoreNorvell的解释之外,这里还介绍了实现的外观
public boolean stringChecker(String input) {
boolean result = true;
char[] arr = input.toCharArray();
Stack<Character> stack = new Stack<>();
try {
for (int i = 0; result && i < arr.length; i++) {
if (arr[i] == '(' || arr[i] == '[' || arr[i] == '<') {
stack.push(arr[i]);
} else if(arr[i] == ')') {
Character c = stack.pop();
result = c.equals('(');
} else if(arr[i] == ']') {
Character c = stack.pop();
result = c.equals('[');
} else if(arr[i] == '>') {
Character c = stack.pop();
result = c.equals('<');
} else {
// found some char that is not allowed
// here it is not just ignored,
// it invalidates the input
result = false;
}
}
// when the teher is not more chars in the array
// the stack has to be empty
result = result && stack.isEmpty() ;
} catch(EmptyStackException e) {
// found a closing bracket in the array
// but there is nothing on the stack
result = false;
}
return result;
}
@Test
public void stringChecker() {
Assert.assertTrue(stringChecker("[]"));
Assert.assertTrue(stringChecker("[(<>)]"));
Assert.assertFalse(stringChecker("([<>)]"));
Assert.assertFalse(stringChecker(">"));
// invalid char
Assert.assertFalse(stringChecker("<[]e>"));
// stack is not empty
Assert.assertFalse(stringChecker("("));
}
公共布尔字符串检查器(字符串输入){
布尔结果=真;
char[]arr=input.toCharArray();
堆栈=新堆栈();
试一试{
对于(int i=0;result&&i result=c.equals('感谢您的编辑不幸的是,我是AFK,所以我无法批准它。我已经编辑了我的答案以显示完整的代码,请随意再次改进它!