如何通过Scanner读取字符串并按拆分方式存入ArrayList?
解决Scanner读取字符串拆分存入ArrayList的问题
问题分析
你遇到的两个问题原因如下:
- 第一个代码中
sc.hasNext()会持续等待输入,因为Scanner默认将回车视为空白分隔符而非输入结束信号,按下回车后程序不会终止循环,会一直等待新的输入。 - 第二个代码的核心错误是拆分用的正则表达式写错了——
//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
相关产品推荐
相关产品推荐

