2014-06-10 52 views
-1

我想要做的就是在有空間時分割一個字符串。例如,如果輸入是:如何在Java中分割字符串時有空格?

5 10 

陣列應該是[ 「5」, 「10」]

我嘗試這樣做:

Scanner scn = new Scanner(System.in); 
    String[] inputs = input.split("\\p{Space}"); 
    System.out.println(inputs[0]); 
    System.out.println(inputs[1]); 

然而只有5變成了與那麼就有一個數組超出界限的錯誤。

編輯:對不起,我是個白癡。我用:scn.next()而不是scn.nextLine()

+4

'input.split(」「)' –

+1

你在哪裏分配'input'?你確定這是你的想法嗎? – ajb

+0

@JeroenVannevel這有同樣的問題。我首先嚐試了你的方法 –

回答

3

您可以只用做:

text.split(" "); 
+2

這並沒有解決問題'\\ p {空間}'也代表了空間,以便'分裂(「‘)'無權如果'拆分工作(’\\ p {空白}」);'不工作。 – Pshemo

+0

這是正確的答案,並首先給予應該被接受。 – reor

+1

@reor沒有,如果在'\\ p {分割空間}'沒有工作,那麼它是不可能的'上的「分裂‘'會因爲工作'’」''是\\ p {空間}'的一部分。這個答案不能解決任何問題。這是簡化,但不是解決方案。所有隻建議在''''或'\\ s'上分開的答案都不是**解決OP真正問題的解決方案。 – Pshemo

0

使用本:

input.split("\\s+"); 

這不僅會分裂「5 10「到」5「和」10「,但會被任意數量的空格分割。例如,如果您有4個5到10之間的空格,輸出將是相同的。

或者您可以使用簡單的「」忽略製表符和換行符。

+0

這也將得到製表符和輸入字符。 –

+0

增加了關於這方面的信息。 – Fowlron

+0

有一個問題:你能解釋一下如何用'\\ s +'代替'\\ p {Space}'來解決OP問題嗎?空間屬於'\\ s'和'\\ p {空格}'。注意,問題是關於「數組越界錯誤的」,這意味着分裂沒有發生,和OP不能訪問'輸入[1]'元件(因爲分裂返回總是至少原始字符串'輸入[0]'總是存在所以這不會導致異常)。 – Pshemo

-1

變化 「\ p {空間}」 到 「」 或 「\ S +」

+0

你能解釋這種改變如何解決OP問題嗎? – Pshemo

+0

我在編輯之前發佈了我的回覆。這是GIGO的情況。 – MIke

+0

哪個評論?如果一個人用'next'解釋問題,那麼這不會使你的答案適當。 '\\ p {空格}'也包含''「'因此,如果在'\\ p {Space}'上分割不起作用,那麼使用它作爲分割參數就無權工作。 '\\ s'一樣。 – Pshemo

0

只是這樣做:

input.split(" "); 
+0

看看[此評論](http://stackoverflow.com/questions/24147177/how-to-split-a-string-in-java-when-there-is-a-space/24147246#comment37262789_24147197) – Pshemo

3

這個答案的作品

text.split(" "); // to split on a single space character 

,但好像你沒有得到你所說的輸入。

您似乎在使用Scanner#next(),它將返回一個單一的令牌,其中一個令牌由空白(空格字符爲空白字符)分隔,而不是Scanner#nextLine(),它將會到達行的末尾,即。尋找\n(或\r\n)。

0

對不起。我是個白癡。我用: scn.next()而不是scn.nextLine()

+0

請用您發現的信息更新您的問題或刪除它。 – reor

+1

你應該接受這個答案作爲解決方案。人們已經準備好認爲有split split(「」);'split(「\\ p {Space}」);'不是。 – Pshemo

+2

其實Sotirios [回答](http://stackoverflow.com/a/24147246/1393766)你的問題正確地解釋了'next'的可能的問題,所以他的答案應該被接受並評論爲'next'確實是問題,這個答案應該被刪除。 – Pshemo

-1

如果有兩個詞之間的多個空間使用此:

text.split("\\s+");

如果輸入是

5 10 15

那麼輸出將是

"5","10","15"

+0

你在這裏想說什麼? '\\ s'上的分割應該在空間上工作'\\ p {Space}'不是?你能解釋這個變化解決了什麼問題嗎?從我看到'\\ s'只是添加其他空格,如製表符和行分隔符,這是不必要的。 – Pshemo