2013-02-21 118 views
2

我想将一个字符串拆分成一个字符串数组,但是当它拆分字符串时只有第一部分在拆分之前在[0]槽中的数组中,但没有任何东西在[1]或以后。当它试图拼接[1]在Java中分割一个字符串,

import java.util.Scanner; 

public class splittingString 
{ 

    static String s; 


    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Enter the length and units with a space between them"); 
     s = input.next(); 
     String[] spliced = s.split("\\s+"); 
     System.out.println("You have entered " + spliced[0] + " in the units of" + spliced[1]); 
    } 

} 
+4

使用代码块一致性和逻辑缩进。代码的缩进旨在帮助人们理解程序流程。 – 2013-02-21 16:56:53

+0

您是否验证了输入是您期望的内容? – aglassman 2013-02-21 16:57:52

+0

我试图用“\\ s”和“”分割同样的问题,如果你打印出数组的长度,它总是1 – MeryXmas 2013-02-21 16:57:54

回答

11

您应该使用输出这也返回一个Java异常错误: -

input.nextLine() 

目前,使用的是接下来将返回空间delimeted

+0

这工作,谢谢。愚蠢的我。 – MeryXmas 2013-02-21 17:03:20

+0

我的荣幸,您可以在javadoc中看到其他一些方法,这些方法可以让您读取“拼接”结果而无需调用拆分。即input.nextDouble()和input.next() – chrisw 2013-02-21 17:06:32

5

input.next()读取一个单词不是整行(即将停在第一个空格处)。要阅读整行使用input.nextLine()

3

假设您的输入是12 34s变量的内容是12而不是12 34。您应该使用Scanner.nextLine()来读取整行。

3

这个问题不在split()函数调用中。相反,问题出在您用来从控制台读取输入的功能。

next()只会读取您输入的第一个单词(基本上在它遇到的第一个空格后不会读取)。使用nextLine()。它会读取整行(包括空格)。

这里更正后的代码:

import java.util.Scanner; 

public class StringSplit { 

    static String s; 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out 
       .println("Enter the length and units with a space between them"); 
     s = input.nextLine(); 
     String[] spliced = s.split("\\s+"); 
     System.out.println("You have entered " + spliced[0] 
       + " in the units of" + spliced[1]); 

    } 

} 
+1

也添加了解决方案。 – Arpit 2013-02-21 17:03:03

+0

@Arpit大声笑我实际上是在你评论时写的。太快了:P – Ankit 2013-02-21 17:04:37

+1

我急着在upvoting每个正确答案。并转向下一个问题。 ;) – Arpit 2013-02-21 17:05:49