2015-10-01 54 views
1

我試圖做這樣的事情是什麼,這些人都做過功能: How to split a comma-separated string? 但是,當我做到以下幾點:拆分命令不與掃描儀

String UserInput = new Scanner(System.in).next(); 
GradesNonInt = Arrays.asList(UserInput.replaceAll("\\s","").split(",")); 
System.out.println(GradesNonInt.size()); 

當我輸入一個字符串,如「1,2,3 「我打印了3張。當我輸入「1,2,3」時,我打印1張。出於某種原因,當字符串中有空格時,它不想工作。

正如下面的答案之一所述,直接輸入「1,2,3」似乎工作正常,但是當從掃描儀(System.in).next()取得時,事實並非如此。

+0

這裏的堆棧溢出,而不是添加'[已解決]'標題我們有[接受答案](http://meta.stackexchange.com/a/5235/186652)機制。如果一個答案包含解決問題的問題,則應將其標記爲問題。如果答案很少,你可以標記你最喜歡的一個。 – Pshemo

回答

2

我試圖在UserInput串以下代碼,並印刷3當我用「1,2,3」

String UserInput = "1, 2, 3"; 
    List<String> GradesNonInt = Arrays.asList(UserInput.replaceAll("\\s","").split(",")); 
    System.out.println(GradesNonInt.size()); 

問題不具有分裂但這種情況正在發生的原因掃描儀使用打破其輸入爲標記一個分隔符模式,它默認匹配空白,這就是爲什麼會顯示此行爲。 Refer this link.

如果你願意,你可以通過使用掃描儀類的useDelimiter method改變定界符比空間別的東西


UPDATE

要更改分隔符下一行,爲確保代碼接受字符串中的空格,您可以將您的代碼更改爲以下代碼

String UserInput = new Scanner(System.in).useDelimiter("\n").next(); 
    List<String> GradesNonInt = Arrays.asList(UserInput.replaceAll("\\s","").split(",")); 
    System.out.println(GradesNonInt.size()); 
+0

謝謝,我沒有真正意識到UserInput可能是問題。我將編輯OP。 –

+0

這導致問題出現在'新的掃描儀(System.in).next();'... – Pshemo

+0

@JoelHemphill如果這個問題解決了,那麼你可以接受幫助你解決這個查詢的答案 –

1

問題是Scanner#next()只能返回令牌(直到找到下一個分隔符或數據結束爲止)。所以對於像1, 2, 3,這樣的輸入,它將返回1,

使用Scanner#nextLine()來讀取整行。

另外每次您要從用戶讀取數據時都不會創建新的Scanner實例。創建一個掃描程序,每個應用程序處理System.in並重新使用它。