2014-06-10 53 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