1

文字列を読み取っていますが、スタックにプッシュされてキューに入れられる前に、順序を維持しながらすべてのスペースと句読点を削除する必要があります。

私は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)
4

3 に答える 3

2

あなたができない理由:

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

あなたが使用できるすべての句読点とスペースのために\W

String output = input.replaceAll("\\W", "");
于 2012-10-16T14:02:21.833 に答える
0

コード スニペットにはエラーをスローしている行が含まれていないため、完全なコード スニペットを投稿してください。

操作しようとしているスタックpop()が空であると表示されます。popスタックに何かをプッシュした後に呼び出されていると確信していますか。

popスタックに何かを置く前に操作を試みていることは間違いありません。

于 2012-10-16T14:00:25.127 に答える
0

問題は、間違った回数ポップしていることです。

input.legnth()スタックに文字数を入れませんが、 pop() を何度も呼び出しています。これは、空白文字と句読点文字をスタックに配置しないためです。

使用してみてください:

while(!stack.empty()) {
        String char1 = stack.pop();
        String char2 = queue.dequeue();
        if (!(char1.equalsIgnoreCase(char2))) {
            diff++;
        }
    }
于 2012-10-16T14:03:48.697 に答える