如何基于逗号分割字符串且避免空格引发的错误
解决Java中逗号分割字符串时的空格问题
我看到你遇到的问题了——用逗号分割字符串时,因为空格或者Scanner读取方式不对导致分割出错对吧?咱们来一步步解决这个问题:
原代码的核心问题
你的代码里有两个关键问题会导致分割错误:
Scanner.next()的读取逻辑:next()默认以空白符(空格、换行、制表符)作为分隔符,所以如果你的movielist.txt里的电影数据行包含空格(比如电影名带空格),next()只会读取到第一个空格前的内容,根本拿不到完整的一行数据。- 严格的逗号分割:
split(",")只会匹配严格的逗号,如果你的数据里逗号前后有空格(比如"肖申克的救赎 , 9 , 剧情"),分割后的数组元素会带有多余的空格,后续转成整数或者处理字符串时都会出错。
修复后的代码
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class MovieHandler { public static void createMovie() { String fileName = "C:\\Users\\kat7r\\eclipse-workspace\\Final OOPs project\\src\\movielist.txt"; File movieFile = new File(fileName); try { Scanner inputStream = new Scanner(movieFile); // 跳过首行(如果首行是表头的话,用nextLine()而非next(),避免表头含空格的情况) if (inputStream.hasNextLine()) { inputStream.nextLine(); } // 用nextLine()读取整行数据,确保拿到完整的一条电影记录 while (inputStream.hasNextLine()) { String movieArgs = inputStream.nextLine(); // 正则表达式\\s*,\\s*:匹配逗号前后任意数量的空白字符(包括0个) String[] splitData = movieArgs.split("\\s*,\\s*"); // 打印验证分割结果 System.out.println("原始行内容:" + movieArgs); if (splitData.length >= 1) { try { int priority = Integer.parseInt(splitData[0]); System.out.println("Priority: " + priority); } catch (NumberFormatException e) { System.out.println("优先级转换失败,当前分割后的第一个元素是:" + splitData[0]); } } } inputStream.close(); } catch (FileNotFoundException e) { System.out.println("找不到文件:" + fileName); e.printStackTrace(); } } public static void main(String[] args) { createMovie(); } }
关键改动说明
- 改用
nextLine()读取整行:确保不管电影名里有没有空格,都能获取到完整的一条电影记录。 - 正则表达式分割:
\\s*,\\s*中的\\s*表示匹配0个或多个空白字符,这样不管逗号前后有没有空格,都能正确分割出干净的元素。 - 增加异常处理:添加了
NumberFormatException的捕获,避免如果分割后的元素不是整数时程序崩溃。 - 安全跳过首行:用
hasNextLine()判断后再跳过首行,避免文件为空时出现错误。
内容的提问来源于stack exchange,提问作者astral004
相关产品推荐
相关产品推荐

