Java如何从制表符分隔文本文件中读取含数字字母的地址字段
问题根因
- 你当前的写法存在两个核心问题:
nextInt()方法仅读取整数内容,不会消费后面的换行符/制表符,后续调用nextLine()会直接读取到剩余的空字符,导致数据读取错位。- Scanner默认以所有空白字符(空格、制表符、换行符等)作为分隔符,而地址字段内部包含空格,用默认分隔符会把地址拆成多个字段,无法读取完整内容。
最优解决方案
推荐直接逐行读取整行内容,再按制表符\t分割成字段,完全避免分隔符冲突问题,示例代码如下:
public void methodName() { File vData = new File("src/volunteer_data.txt"); try { Scanner readFile = new Scanner(vData); // 不需要读取表头的话保留这行,需要解析表头直接删除即可 if (readFile.hasNextLine()) readFile.nextLine(); while (readFile.hasNextLine()) { String line = readFile.nextLine(); // 按制表符分割行内容,-1参数可保留末尾空字段避免解析异常 String[] fields = line.split("\\t", -1); int volunteerID = Integer.parseInt(fields[0]); String vName = fields[1]; String address = fields[2]; String contact = fields[3]; // 此处可添加自定义业务逻辑处理读取到的字段 } readFile.close(); } catch(FileNotFoundException e) { e.printStackTrace(); } }
可选方案:修改Scanner分隔符
如果你不想逐行拆分,也可以直接把Scanner的分隔符指定为制表符,也能实现正常读取:
public void methodName() { File vData = new File("src/volunteer_data.txt"); try { Scanner readFile = new Scanner(vData); // 指定分隔符为制表符 readFile.useDelimiter("\\t"); // 跳过表头行 readFile.nextLine(); while (readFile.hasNextLine()) { int volunteerID = readFile.nextInt(); String vName = readFile.next(); String address = readFile.next(); // 读取联系方式同时移除行尾多余的空白字符 String contact = readFile.nextLine().strip(); // 此处可添加自定义业务逻辑处理读取到的字段 } readFile.close(); } catch(FileNotFoundException e) { e.printStackTrace(); } }
内容的提问来源于stack exchange,提问作者John Dao
相关产品推荐
相关产品推荐

