Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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 - Fatal编程技术网

用Java解析字符串

用Java解析字符串,java,Java,大家好,我是新来的编码,我想了解更多。我尝试了不同于我所见过的与此问题相关的其他代码的方法。显示的错误是我不知道如何修复的。下面是我的代码,它一直给我一个错误消息 import java.util.Scanner; public class ParseStrings { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); String userInput =

大家好,我是新来的编码,我想了解更多。我尝试了不同于我所见过的与此问题相关的其他代码的方法。显示的错误是我不知道如何修复的。下面是我的代码,它一直给我一个错误消息

import java.util.Scanner;

public class ParseStrings {
   public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
      String userInput = "";
      boolean inputDone = false; 

      while (!inputDone) {
         System.out.print("Enter input string: \n");
         userInput = scnr.nextLine();


         if (userInput.equals("q")){
            System.out.println("First word: " + userInput);
            inputDone = true; 
         } else {
            String[] userArray = userInput.split(",");
            System.out.println("First word: " + userArray[0]);
            System.out.println("Second word: " + userArray[1]);
            System.out.println();
        }
      }


      return;
   }
}
我的输入是:金猴,华盛顿特区,吉尔,艾伦 输入输入字符串:q


如果这是一个简单的修复方法,我很抱歉。

您正在将文件或其他有限的源代码输入标准in,而不是仅在控制台上键入,这是无止境的,因此不可能在nextLine调用中导致NoTouchElementException,并且您正在传递,例如:

Golden, Monkey
Washington, DC
Jill, Allen
q
关键的是,在q之后没有新行。nextLine将一直运行,直到它看到一个新行,若流的末尾首先到达,那个么从技术上讲就并没有nextLine可以给出


简单的解决方案:不要使用nextline,而是使用next,然后使用scanner.useDelimiter\r?\n;要告诉scanner令牌仅由换行符分隔,而默认值是任何空格。

在代码中使用字符串[]userArray=userInput.split,;它将在找到的任何位置拆分给定字符串,但如果您输入的字符串没有,则数组将为空,当您调用它为userArray[0]编制索引时,它将显示一个错误,因为没有拆分,因为未检测到。 因此有两种解决方案: 第一:不要使用拆分,使用字符串[]userArray=userInput.split;这将基于空格分割行,因此字符串数组不会为空。
第二个:放入字符串[]userArray=userInput.split,;在try-and-catch中,即如果用户没有输入a,则在其输入中代码不会显示空数组错误。在catch中也放置一个适当的代码,当用户输入中没有a时,该代码将处理用户输入。

这是弹出的错误代码。”线程main java.util.NoSuchElementException中的异常:在java.base/java.util.Scanner.nextLineScanner.java:1651的parseString.mainParseString.java:11'处未找到任何行。请将整个堆栈跟踪粘贴到问题中。不是每个人都读评论。这回答了你的问题吗?请将您的输入和输出准确地写在“`”内。您是手动输入还是重定向输入?或者更简单:在qNo后面键入换行符,@Hawk,这不是问题所在。如果您在控制台上键入,如果您未能按enter键,则不会发生异常-程序似乎会一直挂起,直到您按enter键为止。我的意思是在空行上结束重定向的输入文件。然而,我刚刚用你在文件中的输入尝试了OP的代码,它可以工作。可能OP使用的输入格式略有不同。这是完全错误的。自己尝试一下:System.out.printlnArrays.toStringHello.split,;-这印着你好。拆分不在字符串中的内容会在包含所有输入的数组中返回1个字符串。如果字符串中有a,则使用带a的拆分函数拆分多个单词的字符串,但如果要分隔单词的字母表,请尝试。拆分还有一件事不要尝试执行上面在java中所做的操作,不能直接打印数组的不是python,而是迭代元素以打印它们。