【问题标题】:String to Stack and Queue字符串到堆栈和队列
【发布时间】:2012-10-06 15:37:03
【问题描述】:

我正在读取一个字符串,但在将其推入堆栈并将其排入队列之前,我需要在保持顺序的同时消除所有空格和标点符号。

我是 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)

【问题讨论】:

  • 您发布的错误来自您调用Stack.pop但在您发布的代码中您从未调用pop的行。

标签: java string stack queue


【解决方案1】:

问题是你弹出错误的次数。

您没有将input.legnth() 的字符数放在堆栈上,而是多次调用pop()。这是因为您没有将空格和标点字符放入堆栈中。

尝试使用:

while(!stack.empty()) {
        String char1 = stack.pop();
        String char2 = queue.dequeue();
        if (!(char1.equalsIgnoreCase(char2))) {
            diff++;
        }
    }

【讨论】:

    【解决方案2】:

    任何你不能做的理由:

    String output = input.replaceAll("[.?!,;:-]", "");
    

    对于所有标点符号和空格,您可以使用\W

    String output = input.replaceAll("\\W", "");
    

    【讨论】:

    • 可能是学java的,不懂这些功能。
    • 空格呢,怎么消除那些使用这个的?
    • @user1354275 我已经为 all 标点符号和空格添加了答案。这就是你想要的吗?
    • 谢谢,这更简单有效。
    • @JProg 没问题,很高兴能帮上忙。 Java API 非常广泛,通常有一个函数可以提供您正在寻找的内容:)
    【解决方案3】:

    请发布完整的代码 sn-p,因为代码 sn-p 不包含引发错误的行。

    它说你正在尝试pop() 操作的堆栈是空的。你确定pop 在堆栈上推送某些内容后被调用。

    我很确定您在将任何内容放入堆栈之前尝试pop 操作。

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 2013-09-18
      • 1970-01-01
      • 2014-07-21
      • 2015-11-16
      • 2019-03-07
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多