我有一些具体的任务。我们有像“(()[]
导入java.util.栈;
公开课考试{
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;
}
}
除了@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("("));
}
注意,在这种情况下,switch case
语句比if-else-if-else
更优雅。
(0)你在推
(1) 在第一次成功的比赛中,你将以result false开始,并将其设置为true。相反,您应该从结果true开始,并在第一次失败的匹配中将其设置为false。
(2)当您用完字符时,您应该检查堆栈是否为空。
(3) 在偷看之前,你应该检查一下堆栈是否为空。
(4) 您可能需要检查不需要的字符。
嘿,伙计们,我有一个任务,我应该读取用户输入的字符串,并使用堆栈检查平衡符号。因此,如果字符串是“{[()]}”,那么字符串是平衡的,因为每个开口都有一个闭合。我的想法是使用一个循环来检查给定字符串中的每个字符,如果该字符串有一个开瓶器,比如“([{”那么它确实是stack.push(char),如果该字符是一个closer”)]}”,那么我需要使用stack。pop(char)。我遇到的问题是,
问题描述 (Problem Description) 如何使用堆栈反转字符串? 解决方案 (Solution) 下面的示例演示了如何在用户定义的方法StringReverserThroughStack()的帮助下使用堆栈来反转字符串。 import java.io.IOException; public class StringReverserThroughStack { private S
问题内容: 我有一个堆栈A,我想创建一个与堆栈A相同的堆栈B。我不希望堆栈B只是指向A的指针- 我实际上是想创建一个包含相同元素的新堆栈B堆栈A的顺序与堆栈A相同。堆栈A是字符串的堆栈。 谢谢! 问题答案: 只需使用Stack类的clone()方法(它实现Cloneable)。 这是一个使用JUnit的简单测试用例: 编辑: tmsimont:这会为我创建“未经检查或不安全的操作”警告。有什么
问题内容: 嗨,我正在尝试使用另一个空堆栈反转堆栈(我自己编写了一个堆栈)。由于某种原因,它无法正常工作。谁能帮我这个 ? 问题答案: while(!stack1.isEmpty()){ Integer value = (Integer)stack1.pop(); System.out.println(value); reverse.push(value); }
问题内容: 将结果转换为描述堆栈跟踪的字符串的最简单方法是什么? 问题答案: 可以使用以下方法将堆栈跟踪转换为。此类可在Apache commons-lang中找到,它是最常见的依赖库,具有许多流行的开源代码
问题内容: 有什么方法可以将堆栈跟踪作为字符串获取? 查看调试包(https://golang.org/pkg/runtime/debug/),它只能打印到标准输出。 问题答案: 将格式化的堆栈跟踪放到提供的中。然后,您可以将其转换为字符串。 您还可以使用,分配足够大的缓冲区来容纳整个堆栈跟踪,并使用将该跟踪放入其中,并返回缓冲区()。