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

如何基于逗号分割字符串且避免空格引发的错误

解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:54:23