2010-08-16 172 views
2

我使用從掃描儀類useDelimiter時遇到的一些問題。掃描儀,useDelimiter

Scanner sc = new Scanner(System.in).useDelimiter("-"); 
while(sc.hasNext()) 
{ 
    System.out.println(sc.next()); 
} 

如果我有這個輸入

A-B-C

的輸出將是

A B

並等待,直到我在另一種類型的「 - 」它打印出來的最後一個字符

但是,如果我不是有用戶輸入數據,並插入一個字符串到掃描儀,而不是代碼將工作。這是什麼原因,我該如何解決?我不想使用StringTokenzier

回答

5

如果Scanner沒有等你輸入另一個-那麼它會錯誤地認爲你已經完成了輸入輸入。

我的意思是,Scanner必須等待您輸入-,因爲它無法知道下一個輸入的長度。

因此,如果用戶想輸入A-B-CDE,並且您停下來在C處啜飲一口咖啡,它將無法獲得正確的輸入。 (你期望[ A, B, CDE ]但它會得到[ A, B, C ]

當你在一個完整的String通過它,Scanner知道在哪裏輸入的到底是,並不需要等待另一個分隔符。

我會怎麼做如下:

Scanner stdin = new Scanner(System.in); 
String input = stdin.nextLine(); 
String[] splitInput = input.split("-", -1); 

現在,您將有Strings數組包含所有- S的之間的數據。

Here is a link to the String.split() documentation for your reading pleasure.

+0

所以有解決此,但沒有辦法用一個掃描儀這需要完整輸入,另有掃描儀,其分析輸入? – starcorn 2010-08-16 12:59:40

+0

@klw,我會告訴你如何在編輯中做到這一點。 – jjnguy 2010-08-16 13:01:34

+0

@klw,你只需要1個'Scanner'。 – jjnguy 2010-08-16 13:03:29

3

你可以使用一個替代分隔字符串useDelimiter("-|\n"); 它與一個字符串參數,以及由System.in閱讀。 在System.in的情況下,這需要你按在該行的末尾輸入。

0

我會怎麼做如下:

Scanner stdin = new Scanner(System.in); 
String s = stdin.nextLine(); 
String[] splitInput = s.split("-", -1); 

現在,您將有Strings數組包含所有- S的之間的數據。