2012-08-11 63 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", " "); 
相关问题