You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Scanner读取字符串并按拆分方式存入ArrayList?

解决Scanner读取字符串拆分存入ArrayList的问题

问题分析

你遇到的两个问题原因如下:

  1. 第一个代码中sc.hasNext()会持续等待输入,因为Scanner默认将回车视为空白分隔符而非输入结束信号,按下回车后程序不会终止循环,会一直等待新的输入。
  2. 第二个代码的核心错误是拆分用的正则表达式写错了——//s+是无效语法,正确的任意空白匹配应该是\\s+(Java中反斜杠需要转义),这导致拆分失败,整行字符串被作为单个元素存入列表。

正确实现方案(单行输入)

如果你只需要读取一行输入并拆分单词,以下代码可以实现需求:

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<String> yourList = new ArrayList<>();

        // 读取整行输入(包含所有空格分隔的单词)
        String inputLine = sc.nextLine();
        // 使用\\s+匹配一个或多个空白字符(空格、制表符等)拆分字符串
        String[] words = inputLine.split("\\s+");
        // 将拆分后的单词逐一添加到ArrayList
        for (String word : words) {
            yourList.add(word);
        }

        // 输出每个单词单独一行
        for (String word : yourList) {
            System.out.println(word);
        }
        // 输出列表大小(对应示例输入的10)
        System.out.println("列表大小:" + yourList.size());
        
        sc.close();
    }
}

运行后输入I love my job but i am a good lier,会输出每个单词单独一行,并且size()返回10。

扩展:支持多行输入(直到空行结束)

如果需要读取多行输入,直到用户输入空行(仅按回车)才停止,可使用以下代码:

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<String> yourList = new ArrayList<>();
        String line;

        // 循环读取每行,直到输入空行
        while (!(line = sc.nextLine()).isEmpty()) {
            String[] words = line.split("\\s+");
            for (String word : words) {
                yourList.add(word);
            }
        }

        // 输出逻辑同上
        for (String word : yourList) {
            System.out.println(word);
        }
        System.out.println("列表大小:" + yourList.size());
        
        sc.close();
    }
}

内容的提问来源于stack exchange,提问作者Oleg Khandozhko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:43:09