2012-08-11 81 views
1

我玩這個遊戲,你可以收集數百電源ups,知道他們做什麼而不記住他們的唯一方法是查找它們。正因爲如此,我試圖讓自己成爲一個「助手」程序,我可以輸入電源的名稱並獲得它的效果。不正確的打印字符串與從ArrayList空白

下面是帶有無用部分的完整代碼。輸出的例子如下。如果你看看輸出結果,問題應該相當明顯。我可以用什麼方法來解決這個問題,或者我做錯了什麼?

import java.util.ArrayList; 
import java.util.Scanner; 

public class ProgMain { 

// // *** ------------*** and any variations indicate a change of importance or use 

    public static ArrayList<String> itemlist; // ArrayList of items to cycle through to see if item exists in database. 

    static { 
    itemlist = new ArrayList<String>(); 

     itemlist.add("genericitem"); // testing item 
     itemlist.add("exit"); // allows for internal program exit 
     itemlist.add("debuglist"); // allows to print every item in "itemlist" for debug 

     // ***-------------------------------------------------*** 

     itemlist.add(0, "thisitem hasaspace"); 

    } 

static Scanner console = new Scanner (System.in); 

public static void main(String[] args) { 

    String item = " " // variable to store name of item 

    System.out.println("Enter an item name to check the database."); 
    System.out.println("Enter 'exit' to quit the program."); 
    System.out.println(); 

    while(true) { 
     System.out.print("Item Name: "); 
     item = console.next().toLowerCase().replaceAll("\\s", " "); 


     /** 
     * ONLY FINDS FIRST WORD, even after removal of spaces. 
     */ 
      //DEBUG 
     System.out.print("\n  DEBUG: " + item + "\n"); 

     if (itemlist.contains(item)) { // cycle through database 

      displayItemProperties(item); // find item and print properties 
      System.out.println(); 

     } else { // declares if the item isn't found in database 
      System.out.println("That item does not exist."); 
      System.out.println(); 
     } 
    } 
} 

static void displayItemProperties(String item) { 

    /** 
    * Item names must be in LOWERCASE and have NO SPACES. 
    */ 

    // GENERIC IF STATEMENT 
    // Easy copy/paste to add new items 

    /* 

    if (item.equals("")) { 
     System.out.println(""); 
    } 

    */ 
    // **----------------------------------** 

    if (item.equals("genericitem")) { 
     System.out.println("A generic item."); 
    } 

    if (item.equals("debuglist")) { 
     for (int i = 0; i < itemlist.size(); i++) { 
      System.out.println(itemlist.get(i)); 
     } 
    } 

    if (item.equals("exit")) { 
     System.out.println("Application Terminating..."); 
     System.exit(0); 
    } 

    // ***------------------------------------------------------*** 

    if (item.equals("thisitem hasaspace")) { 
     System.out.println("If a name has a space, it wont show up correctly..."); 
    } 

    // introduce new item declarations here  
} 
} 

這是一些示例輸出不帶空格中輸入:

Enter an item name to check the database. 
Enter 'exit' to quit the program. 

Item Name: genericitem 

DEBUG: genericitem 
A generic item. 

Item Name: exit 

DEBUG: exit 
Application Terminating... 

,這是當使用帶有空格的名稱會發生​​什麼:

Enter an item name to check the database. 
Enter 'exit' to quit the program. 

Item Name: thisitem hasaspace 

DEBUG: thisitem 
That item does not exist. 

Item Name: 

DEBUG: hasaspace 
That item does not exist. 

Item Name: exit 

DEBUG: exit 
Application Terminating... 

回答

2

Scanner類默認情況下使用任何空格作爲分隔符模式。這包括一個常規的SPACE。因此,當您撥打Scanner.next()時,它將拉取下一個標記,並且有一個空間是2個單獨的標記,因爲空格是默認分隔符。

與其說Scanner.next()的,嘗試調用Scanner.nextLine()

item = console.nextLine().toLowerCase().replaceAll("\\s", " ");