Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将逗号和空格分隔的输入拆分为两个单词_Java_String - Fatal编程技术网

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

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")){

我很难将用户输入的字符串拆分为两个单词。字符串的格式为“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);"  
有人能告诉我哪里出了问题吗?

你为什么不试试:

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”

将结果分配回input
input=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()。请再次查看并调试,如果您想在您的想法无论如何,更新的答案,以涵盖该场景以及。非常感谢。