Java 从一系列用户输入中拆分字符串

Java 从一系列用户输入中拆分字符串,java,split,Java,Split,我正在处理一个问题,该问题涉及读取用户字符串输入,直到用户输入为空,然后分割并打印空白。到目前为止,我可以设法分割空白,但当多用户输入时,它只分割并打印第一行。请看下面我的代码图片,以获得更好的想法。任何帮助都将不胜感激 导入java.util.Scanner 公共类线路{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (true) {

我正在处理一个问题,该问题涉及读取用户字符串输入,直到用户输入为空,然后分割并打印空白。到目前为止,我可以设法分割空白,但当多用户输入时,它只分割并打印第一行。请看下面我的代码图片,以获得更好的想法。任何帮助都将不胜感激

导入java.util.Scanner

公共类线路{

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (true) {
        String input = scanner.nextLine();

        if (input.equals("")) {
            break;
        }
        if (input.contains(" ")) {
            String[] tokens = input.split(" ");

            // Then print them 
            for (String token : tokens) {
                System.out.println(token);

            }

        }

    }
}

}

使用while scanner.hasNext并删除if/else条件。然后您的代码就可以工作了。

问题在于您组织代码的方式。调用readLine,然后在if/else中调用readLine,然后打印出前面的标记,然后再次调用readLine,而不处理前面的标记

public class LineByLine {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            String input = scanner.nextLine();
            // check for empty line immediately.
            if (input.equals("")) {
                break;
            }
            // otherwise split it (and use the regular expression for one
            // more white spaces).
            String[] tokens = input.split("\\s+");

            // Add space for additional tokens.
            allTokens = Arrays.copyOf(allTokens, allTokens.length + tokens.length);
            // copy new tokens to array.
            int i = allTokens.length - tokens.length;
            for (String v : tokens) {
                allTokens[i++] = v;
            }
        }

        for (String token : allTokens) {
            System.out.println(token);
        }
    }
}
我将您的数组从空白改为令牌,因为您并没有真正节省空白

使用ArrayList而不是数组

在开始时初始化它

List<String> allTokens = new ArrayList<>();
完成后,打印它们

for (String str : allTokens) {
   System.out.println(str);
}

请不要将您的代码作为图像发布在本网站上,而是作为代码格式的文本发布,因为我们都无法复制、粘贴和运行图像。有关这方面的更多信息,请参阅。另外,请查看以了解更多的现场最佳实践。我建议阅读BufferedReader上的文档,并使用它而不是Scanner;数组将包含行中的单词列表。感谢您让我知道,我很抱歉,我以后不会发布图像,除非您可以发出EOF信号,例如*nix机器扫描仪上的ctrl-D。HASEXT可能无法按照控制台输入的要求工作,因为扫描仪不知道用户何时不想键入其他行。因此,它只是阻塞并等待用户输入。这不同于在文件中扫描,当所有数据都已读取时,底层文件系统会发出EOF信号。感谢您的帮助!在您的帮助下,我已将代码重新调整为以下内容。但我仍然有一个输出问题。我需要for循环执行,完成后才打印字符串。我尝试在for循环之外声明一个新的字符串变量,但在循环完成后打印行时遇到了困难。请查看我的更新代码的原始帖子,谢谢!我修改了我的答案,向您展示了如何增加数组的大小以附加更多的项。但是,使用ArrayList会使这更容易,因为您只需在开始时分配它一次,然后添加值即可。附加代码对用户是透明的。
for (String str : allTokens) {
   System.out.println(str);
}