Java 将逗号和空格分隔的输入拆分为两个单词
我很难将用户输入的字符串拆分为两个单词。字符串的格式为“word1,word2”,我正在尝试创建word1和word2两个单独的字符串。以下是我的尝试:Java 将逗号和空格分隔的输入拆分为两个单词,java,string,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")){
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);"
有人能告诉我哪里出了问题吗?你为什么不试试:
input.split(",");
这将为您提供一个字符串数组。来自JavaDocs
public String[] split(String regex)
围绕给定正则表达式的匹配项拆分此字符串。
此方法的工作方式类似于通过调用具有
给定的表达式和零的极限参数。尾随空
因此,结果数组中不包括字符串
更新:因为,您使用的是sc.next()
,它将接受一个单词,除非它看到一个空格,它将终止输入。您应该使用sc.nextLine()
将完整的输入作为用户输入
next()
public java.lang.String next()
查找并返回下一个完整的
来自此扫描仪的令牌。完整标记的前面和后面是
与分隔符模式匹配的输入。此方法可能会在
等待输入扫描,即使之前调用hasNext
结果是真的
nextLine()
public java.lang.String nextLine()
使此扫描仪通过
当前行并返回跳过的输入。这种方法
返回当前行的其余部分,不包括位于
结束。该位置设置为下一行的开头。自从
此方法继续在输入中搜索一行
分隔符,它可以缓冲所有要搜索的行的输入
如果没有行分隔符,则跳过
你为什么不试试:
input.split(",");
这将为您提供一个字符串数组。来自JavaDocs
public String[] split(String regex)
围绕给定正则表达式的匹配项拆分此字符串。
此方法的工作方式类似于通过调用具有
给定的表达式和零的极限参数。尾随空
因此,结果数组中不包括字符串
更新:因为,您使用的是sc.next()
,它将接受一个单词,除非它看到一个空格,它将终止输入。您应该使用sc.nextLine()
将完整的输入作为用户输入
next()
public java.lang.String next()
查找并返回下一个完整的
来自此扫描仪的令牌。完整标记的前面和后面是
与分隔符模式匹配的输入。此方法可能会在
等待输入扫描,即使之前调用hasNext
结果是真的
nextLine()
public java.lang.String nextLine()
使此扫描仪通过
当前行并返回跳过的输入。这种方法
返回当前行的其余部分,不包括位于
结束。该位置设置为下一行的开头。自从
此方法继续在输入中搜索一行
分隔符,它可以缓冲所有要搜索的行的输入
如果没有行分隔符,则跳过
问题是您使用的是
sc.next()
而不是sc.nextLine()
。我可以看到,在您的输入中,您正在输入“leads,gold”,其中leads后面跟一个空格。在这种情况下,sc.next()
只返回“leads”,而不是“leads,gold”问题是您使用的是sc.next()
而不是sc.nextLine()
。我可以看到,在您的输入中,您正在输入“leads,gold”,其中leads后面跟一个空格。在这种情况下,sc.next()
将只返回“leads”,而不是“leads,gold”将结果分配回inputinput=input.replaceAll(“\\s+”,”)代码>将结果分配回输入input=input.replaceAll(“\\s+”,”)代码>他遇到了一个异常,他需要帮助解决这个问题。异常并不是因为他试图用空格替换逗号,而是因为他没有读取整个输入,而是读取部分输入。@user3493289因为他试图实现手动算法,而不是恢复Strings已经开发和提供的算法,但您的解决方案无助于解决他遇到的异常。异常是因为使用了sc.next()而不是sc.nextLine()。对他的算法的改进应该是注释而不是答案。出现异常是因为这个字符串wordTwo=input.substring(index1+1,input.length())代码>不是因为sc.next()代码>。请再次查看并调试,如果您想在您的想法无论如何,更新的答案,以涵盖该场景以及。谢谢,他遇到了一个例外,他需要帮助解决这个问题。异常并不是因为他试图用空格替换逗号,而是因为他没有读取整个输入,而是读取部分输入。@user3493289因为他试图实现手动算法,而不是恢复Strings已经开发和提供的算法,但您的解决方案无助于解决他遇到的异常。异常是因为使用了sc.next()而不是sc.nextLine()。对他的算法的改进应该是注释而不是答案。出现异常是因为这个字符串wordTwo=input.substring(index1+1,input.length())代码>不是因为sc.next()代码>。请再次查看并调试,如果您想在您的想法无论如何,更新的答案,以涵盖该场景以及。非常感谢。