我正在尝试读取一个字符串,但在将其推入堆栈并将其排入队列之前,我需要在保持顺序的同时消除所有空格和标点符号。我尝试这样做,但它的trowing和例外。我是Java新手,为什么会这么想?
for (int i = 0;i < input.length(); i++){
String character = Character.toString(input.charAt(i));
if (charChecker(character)){
stack.push(character);
queue.enqueue(character);
}
}
private static boolean charChecker (String character) {
if (character.equals(" ") || character.equals(".") ||
character.equals("?") || character.equals("!") ||
character.equals(",") || character.equals(";") ||
character.equals(":") || character.equals("-"))
return false;
else
return true;
}
int diff = 0;
for (int i = 0; i < input.length(); i++) {
String char1 = stack.pop();
String char2 = queue.dequeue();
if (!(char1.equalsIgnoreCase(char2))) {
diff++;
}
}
这是我得到的输出
Enter file name: input1.txt
evil live
Exception in thread "main" java.util.EmptyStackException
at Stack.pop(Stack.java:22)
at Palindrome.main(Palindrome.java:57)
答案 0 :(得分:2)
你不能做任何理由:
String output = input.replaceAll("[.?!,;:-]", "");
对于所有标点符号和空格,您可以使用\W
:
String output = input.replaceAll("\\W", "");
答案 1 :(得分:0)
请发布完整的代码段,因为代码段不包含引发错误的行。
它表示您尝试pop()
操作的堆栈为空。你确定在Stack上推送东西后会调用pop
。
我很确定您在将任何内容放入堆栈之前尝试pop
操作。
答案 2 :(得分:0)
问题是你弹出了错误的次数。
你没有在堆栈上放置input.legnth()
个字符,但是多次调用pop()。这是因为您没有将空格和标点字符放在堆栈上。
尝试使用:
while(!stack.empty()) {
String char1 = stack.pop();
String char2 = queue.dequeue();
if (!(char1.equalsIgnoreCase(char2))) {
diff++;
}
}