Java中split函数分割字符串结果不符合预期问题求助
问题根因
- 问题出在
Scanner类的next()方法的默认行为:next()会以空白符(空格、制表符、换行符等)作为读取终止符,仅返回第一个空白符之前的输入内容。你输入hello world java时,s0实际仅被赋值为hello,对该值按空格分割自然得到长度为1的数组。
修复方案
方案1:使用nextLine()读取整行输入
将String s0=sc.next();替换为String s0=sc.nextLine();即可。nextLine()会读取整行输入直到遇到换行符,可完整拿到hello world java整段内容,按空格分割后即可得到长度为3的数组。
修复后完整代码:
import java.util.*; class Solution { public static void main(String d[]) { Scanner sc = new Scanner(System.in); // 改用nextLine读取完整的一行输入 String s0 = sc.nextLine(); String p[] = s0.split(" "); System.out.println(p.length); } }
方案2:直接利用Scanner的默认分割特性
Scanner默认就以空白符作为输入分隔符,不需要手动调用split方法,直接迭代读取所有输入即可得到拆分后的内容:
import java.util.*; class Solution { public static void main(String d[]) { Scanner sc = new Scanner(System.in); List<String> inputList = new ArrayList<>(); while (sc.hasNext()) { inputList.add(sc.next()); } System.out.println(inputList.size()); } }
优化提示
如果输入内容存在多个连续空格的场景,split(" ")会生成空字符串元素,建议改为使用正则匹配多个空白符:s0.split("\\s+"),可以自动忽略连续空格,得到更符合预期的分割结果。
内容的提问来源于stack exchange,提问作者Rishabh Talwar
相关产品推荐
相关产品推荐

