我很难将一串用户输入分成两个单词。该字符串的格式为“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);"
有人可以告诉我哪里出错了吗?
答案 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()
将只返回“引导”,而不是“引导,黄金”