文本转字符串数组及安全索引访问方法
时间:2026-01-30 11:39:40 277浏览 收藏
积累知识,胜过积蓄金银!毕竟在文章开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《文本转字符串数组及安全索引访问方法》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

本文详解如何正确读取逗号分隔的文本文件内容,将其拆分为字符串数组(或列表),并避免因索引越界导致的 `IndexOutOfBoundsException`,提供简洁、健壮且符合现代 Java 最佳实践的解决方案。
原始代码存在多个关键问题:
- 错误使用 add(index, element):TexttoList.add(d, scanText.next()) 试图在指定索引插入元素,但列表初始为空,首次调用 add(0, ...) 成功,而 add(1, ...) 会因当前 size=1 导致 IndexOutOfBoundsException(Java 要求插入索引 ≤ size);
- 循环嵌套逻辑混乱:外层 while(scanText.hasNext()) 与内层 for(int d = 0; d < 4; d++) 冗余叠加,导致重复尝试读取(但 Scanner 在首次 next() 后已耗尽输入);
- 未校验索引有效性:直接调用 TexttoList.get(3),而实际只成功添加了 1 个元素,必然越界。
✅ 推荐方案:使用 Java NIO 的 Files.readString() + String.split()(JDK 11+)
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
public class TextFileToList {
public static void main(String[] args) {
try {
// 1. 一次性读取整个文件为字符串(自动使用 UTF-8 编码)
String content = Files.readString(Paths.get("myTEXT.txt"));
// 2. 按逗号及可选空格分割,得到字符串数组
String[] parts = content.trim().split(",\\s*");
// 3. 转换为不可变列表(便于调试和后续操作)
List<String> textList = Arrays.asList(parts);
// ✅ 安全访问:先检查长度再取值
if (textList.size() > 3) {
System.out.println("第4个元素(索引3): " + textList.get(3)); // 输出: COMMING
} else {
System.out.println("警告:列表长度不足4,无法访问索引3");
}
// 打印全部元素验证
System.out.println("完整列表: " + textList);
// 输出: [PETTY MIND, 2023, IS, COMMING]
} catch (IOException e) {
System.err.println("读取文件失败: " + e.getMessage());
}
}
}? 关键说明:
- ",\\s*" 正则确保能匹配 , 后跟任意数量空格(如 "COMMING " 也能正确分割);
- content.trim() 防止首尾空白符干扰分割结果;
- 使用 Arrays.asList() 得到固定大小列表,若需可变列表可改为 new ArrayList<>(Arrays.asList(parts));
- 务必校验索引边界 —— 这是避免 IndexOutOfBoundsException 的根本原则,而非依赖“数据一定存在”。
⚠️ 注意事项:
- 若需兼容 JDK 8 或更低版本,请改用 Files.readAllLines() + String.join() 或 BufferedReader;
- 大文件不建议用 readString()(内存占用高),应采用流式逐行处理;
- 生产环境建议添加异常分类处理(如 NoSuchFileException 单独捕获)。
此方法简洁、高效、可读性强,彻底规避了 Scanner 分词状态管理的复杂性,是处理结构化单行文本的首选实践。
本篇关于《文本转字符串数组及安全索引访问方法》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!
相关阅读
更多>
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
最新阅读
更多>
-
138 收藏
-
190 收藏
-
131 收藏
-
423 收藏
-
369 收藏
-
453 收藏
-
202 收藏
-
380 收藏
-
315 收藏
-
437 收藏
-
110 收藏
-
315 收藏
课程推荐
更多>
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习