字符串到堆栈和队列

时间:2012-10-16 13:58:21

标签: java string stack queue

我正在尝试读取一个字符串,但在将其推入堆栈并将其排入队列之前,我需要在保持顺序的同时消除所有空格和标点符号。我尝试这样做,但它的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)

3 个答案:

答案 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++;
        }
    }