2012-10-16 67 views
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) 
+1

您發佈的誤差來自哪裏,你叫'Stack.pop'但在你的代碼貼出你永遠不會調用'pop'線。 –

回答

0

問題是你如雨後春筍般冒出的時間錯誤的量。

您不會在堆棧中放入input.legnth()字符數,但會多次調用pop()。這是因爲您不會將空格和標點符號放在堆棧上。

嘗試使用:

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

謝謝,這解決了這個問題。 – JProg

+0

隨時將其標記爲已接受。 –

0

請發表完整的代碼段爲代碼段不包括扔錯誤行。

它表示您嘗試運行pop()操作的堆棧爲空。你確定pop正在堆棧中推送一些東西后被調用。

在將任何東西放入堆棧之前,我確定您正在嘗試pop操作。

2

任何原因,你不能只是做:

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

對於所有的標點和空格,你可以使用\W

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

可能是因爲他在學習java而不瞭解這些功能。 –

+0

什麼是空格,我怎麼能消除這些使用這個? – JProg

+0

@ user1354275我爲**全部**標點和空格添加了答案。那是你要的嗎? – Jivings