static List<String> openingBrackets = new ArrayList<String>();
static List<String> closingBrackets = new ArrayList<String>();
public static final String quit = ""; // to be used in sentinel loop
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
// list containing all the opening brackets
openingBrackets.add("(");
openingBrackets.add("{");
openingBrackets.add("[");
openingBrackets.add("<");
System.out.println(openingBrackets);
// list that contains the closing brackets
closingBrackets.add(")");
closingBrackets.add("}");
closingBrackets.add("]");
closingBrackets.add(">");
System.out.println(closingBrackets);
String sent = "value"; // some dummy value assigned to sent.
// creating a stack to store the opening brackets
Stack stackOpening = new Stack();
// creating a stack to store the closing brackets
Stack stackClosing = new Stack();
while (!sent.equals(quit))
{
System.out.println("Enter a string to test:");
sent = scanner.nextLine();
for (int i=0; i<sent.length(); i++)
{
char c = sent.charAt(i);
if (! openingBrackets.contains(c))
{
// push the opening brackets in the String sent
// in the Stack for opening brackets
stackOpening.push(c);
}
if (! closingBrackets.contains(c))
{
// push only the closing brackets in the String
// in the stack for closing brackets
stackClosing.push(c);
}
}
}
}
}
Sample input:
-
(< [ { } ( { > ) ] >
Sample output:
- 堆栈(用于左括号):
[ (, <, [, {, }, (, { ]
- 堆栈(用于右括号):
[ >, ), ], > ]
However, when printing the two stacks separately; it outputs
-
[ (, <, [, {, }, (, {, >, ), ], > ]
对于两个堆栈
最佳答案
openingBrackets
和 openingBrackets
是 Collection
s of String
s。无论您如何检查,这些集合是否包含 Character
s:
char c = sent.charAt(i);
if (! openingBrackets.contains(c))
由于Collection
不包含任何Character
,因此找不到匹配项,这就是为什么所有元素都添加到两个Stack
中的原因。
要解决此问题,请在测试之前创建 openingBrackets
和 lookingBrackets
Collection
的 Character
或将 c
转换为 String
(如果它包含在这些 Collection
之一中)。
(大多数 Collection
使用 equals
方法检查它们是否包含元素,对于 String
和 Character
仅返回 true
(如果两个实例属于同一类型)
关于java - 使用包含括号的列表将特定括号(左括号、右括号)存储在堆栈中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32922906/