将逗号和空格分隔的输入拆分为两个单词

时间:2016-04-23 08:42:05

标签: java string

我很难将一串用户输入分成两个单词。该字符串的格式为“word1,word2”,我试图创建两个单独的word1和word2字符串。这是我的尝试:

System.out.println("Enter the two words separated by a comma, or 'quit':");

Scanner sc = new Scanner(System.in);

String input = sc.next();

while(!input.equals("quit")){
    input.replaceAll("\\s+","");

    System.out.println(input);  //testing

    int index1 = input.indexOf(",");

    String wordOne = input.substring(0, index1);

    String wordTwo = input.substring(index1+1, input.length() );

    if(wordOne.length()!=wordTwo.length()){
           System.out.println("Sorry, word lengths must match.");
       }

    System.out.println("Enter the two words separated by a comma, or 'quit':"); 

    input = sc.next();
}

这是输出:

Enter the two words separated by a comma, or 'quit':  
leads, golds  
leads,  
Sorry, word lengths must match.  
Enter the two words separated by a comma, or 'quit':  
golds  
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1  
    at java.lang.String.substring(String.java:1911)  
    at Solver.main(Solver.java:22) //this points to the line "String wordOne = input.substring(0, index1);"  

有人可以告诉我哪里出错了吗?

2 个答案:

答案 0 :(得分:1)

你为什么不试试:

input.split(",");

这将为您提供一个String数组。来自JavaDocs。

public String[] split(String regex)
  

围绕给定正则表达式的匹配拆分此字符串。   此方法的工作方式就像通过调用双参数split方法一样   给定的表达式和一个零的限制参数。尾随空   因此,字符串不包含在结果数组中。

更新:因为您正在使用sc.next(),它将只占一个字,除非它看到一个空格,它将终止输入。您应该使用sc.nextLine()将完整输入作为用户输入。

next()

  

public java.lang.String next()   查找并返回下一个完整的   来自此扫描仪的令牌。之前和之后是完整的令牌   与分隔符模式匹配的输入。这种方法可能会阻止   等待输入扫描,即使先前调用了hasNext   返回true。

nextLine()

  

public java.lang.String nextLine()

     

推进此扫描仪   当前行并返回跳过的输入。这种方法   返回当前行的其余部分,不包括任何行分隔符   结束。该位置设置为下一行的开头。以来   此方法继续搜索输入以查找行   分隔符,它可以缓冲搜索行的所有输入   如果没有行分隔符,则跳过。

答案 1 :(得分:0)

问题是您使用的是sc.next()而不是sc.nextLine()。我可以看到,在您的输入中,您正在输入“引线,黄金”,其中包含空格。在这种情况下,sc.next()将只返回“引导”,而不是“引导,黄金”