Java 常用语法极简通关(四):数组与字符串的常用操作
开篇一个巡检成绩表处理程序上一章的成绩统计里数组已经露过脸了int[] scores {92, 85, ...}。这一章把它讲透再把日常开发中刷屏的 String 方法一口气过完。还是先看一段完整程序——录入一组成绩做排序展示、查最高最低、格式化输出一张简易成绩表public class ScoreTableApp { public static void main(String[] args) { // 1. 声明并初始化数组 int[] scores {85, 92, 74, 66, 90}; String[] names {张伟, 李强, 王磊, 赵鹏, 陈刚}; // 2. 求最高分、最低分、平均分 int max scores[0]; int min scores[0]; int sum 0; for (int i 0; i scores.length; i) { if (scores[i] max) { max scores[i]; } if (scores[i] min) { min scores[i]; } sum scores[i]; } double avg (double) sum / scores.length; // 3. 打印成绩表拼接出整齐的表头 StringBuilder table new StringBuilder(); table.append( 巡检成绩表 \n); for (int i 0; i names.length; i) { String name names[i]; // 名字不足 3 个字的后面补空格对齐 if (name.length() 3) { name name ; } table.append(name).append().append(scores[i]).append( 分\n); } System.out.print(table.toString()); // 4. 输出统计结论 System.out.println(最高分 max 最低分 min 平均分 avg); // 5. 找出第一个优秀者的名字 for (int i 0; i scores.length; i) { if (scores[i] 90) { System.out.println(首个优秀者 names[i].trim()); break; } } } }运行结果 巡检成绩表 张伟 85 分 李强 92 分 王磊 74 分 赵鹏 66 分 陈刚 90 分 最高分92最低分66平均分81.4 首个优秀者李强程序里涉及三样东西数组、String 方法、StringBuilder分三部分讲。第一部分数组——定长的同类型容器声明与初始化的两种姿势// 姿势一声明时直接给值最常用 int[] scores {85, 92, 74, 66, 90}; // 姿势二只给长度元素拿默认值 int[] arr new int[5]; // 5 个元素全是 0 String[] names new String[3]; // 3 个元素全是 null要点int[]是一个整体——int 的数组这种类型。数组可以装基本类型也可以装引用类型。new int[5]创建后元素自动填默认值int 是 0double 是 0.0boolean 是 false引用类型包括 String是 null。数组长度创建时定死之后不能变。这是数组最大的局限也是后来 ArrayList第九章登场的理由。三件套下标、length、遍历scores[0] // 取第一个元素下标从 0 开始 scores.length // 长度5注意数组的 length 是属性没有括号 scores[i] 100; // 按下标赋值遍历的两种写法第三章已讲这里对号入座for (int i 0; i scores.length; i) { ... } // 要下标用经典 for for (int s : scores) { ... } // 纯取值用增强 for必知坑数组越界ArrayIndexOutOfBoundsException下标的合法范围是0 到 length-1访问scores[5]长度就是 5 时运行期直接抛异常int[] scores {85, 92, 74}; System.out.println(scores[3]); // 编译能过运行崩溃ArrayIndexOutOfBoundsException这类异常是新手期最常见的运行时报错。越界十有八九来自i scores.length这种边界写错记住标准姿势是 length。顺带一提多维数组如int[][] matrix存在但业务代码里用得很少软考偶尔露脸知道int[3][4]是 3 行 4 列即可本系列不展开。第二部分String 的常用方法——就这一把天天用String 类的方法有几十个日常高频的如下表结合案例逐个看方法作用例子length()字符个数锚杆.length()→ 2charAt(i)取下标 i 的字符锚杆.charAt(0)→锚substring(a, b)截取 [a, b) 区间设备巡检.substring(0, 2)→设备indexOf(str)找子串首次出现的位置3号皮带.indexOf(皮带)→ 2contains(str)是否包含子串井下-580m.contains(580)→ trueequals(str)内容比较第二章铁律equalsIgnoreCase(str)忽略大小写比较abc.equalsIgnoreCase(ABC)→ truetrim()去掉首尾空白 维修 .trim()→维修split(分隔符)拆成字符串数组85,92,74.split(,)→[85,92,74]replace(旧, 新)替换全部匹配a-b-c.replace(-, /)→a/b/cstartsWith / endsWith前缀/后缀判断文件名、编号判断常用toUpperCase / toLowerCase大小写转换统一格式用结合案例看几个典型的① 名字对齐用的length()if (name.length() 3) { name name ; // 不足 3 字补空格表格才齐 }注意区分数组的 length 是属性scores.lengthString 的 length 是方法name.length()。带不带括号是经典笔误点也是考点。② 解析 CSV 风格的数据split()trim()是黄金搭档String line 张伟 , 92 , 综采一队 ; String[] parts line.split(,); String name parts[0].trim(); // 张伟 int score Integer.parseInt(parts[1].trim()); // 92字符串转 int第十章细讲③ 判断后再截取indexOf()配合substring()String location 井下-580m东翼大巷; int idx location.indexOf(m); if (idx 0) { // indexOf 找不到会返回 -1先判断 String depth location.substring(3, idx 1); // 580m }④ 前缀判断处理编号String code WX-2026-0341; if (code.startsWith(WX-)) { System.out.println(这是一条维修单); }别忘了第二章讲过的 String 不可变性这些方法全部返回新字符串原字符串纹丝不动。name.trim()之后要把结果接回来——name name.trim();光调用不接收等于白调用。第三部分StringBuilder——循环拼接的唯一正确姿势案例里拼成绩表用的是 StringBuilderStringBuilder table new StringBuilder(); table.append( 巡检成绩表 \n); for (int i 0; i names.length; i) { table.append(name).append().append(scores[i]).append( 分\n); } System.out.print(table.toString());为什么不用熟悉的回顾第二章String 不可变每次都新建一个对象。循环 1000 次就产生 1000 个临时字符串对象内存和速度都是浪费。StringBuilder 内部是一块可变的字符缓冲区append是原地追加不产生新对象最后toString()一次成型。用法就三个动作StringBuilder sb new StringBuilder(); // 1. 创建 sb.append(a).append(100).append(b); // 2. 追加可链式什么类型都能塞 String result sb.toString(); // 3. 转成 String规则一句话循环里拼字符串用 StringBuilder一次性拼两三个用就行编译器对简单的拼接有优化不用矫枉过正。案例里还有个细节\n是换行符转义字符。常用的转义就三个\n换行、\t制表符、\在字符串里表示一个双引号本身。一个隐患两个数组按下标对应有多脆弱回头看案例的数据结构int[] scores {85, 92, 74, 66, 90}; String[] names {张伟, 李强, 王磊, 赵鹏, 陈刚};张伟得 85 分这个关系靠的是两个数组下标对齐来维系的names[i] 的成绩是 scores[i]。程序跑对的前提是录入时两边顺序严格一致。问题在于这种对应关系编译器完全不管。假设录入时手一抖names 里漏了一个人或者顺序排错程序照样编译通过、照样运行只是从此以后李强的成绩全是别人的——结果张冠李戴还不会有任何报错提示。这是数组时代最隐蔽的逻辑 bug 温床。解法其实直觉上很简单把姓名、成绩、班组捆在一起装进一个工人里让它们物理上不可分。这个捆在一起的手段就是下一章的主角——类与对象。常踩的坑排雷清单数组越界下标合法范围 0 ~ length-1边界一律写i length。length 带不带括号数组scores.length属性Stringname.length()方法记死这个区别。String 方法不接收返回值s.trim()之后 s 没变字符串不可变必须s s.trim()。substring 的右边界不含substring(0, 2)取下标 0 和 1左闭右开和很多人的直觉相反。indexOf 找不到返回 -1直接用返回值当下标会越界先判 0。循环里用拼长字符串几百上千次循环后性能明显下降该上 StringBuilder。多数组按下标对应数据错位不报错是最隐蔽的逻辑 bug 温床。本章小结数组定长、同类型两种初始化姿势元素默认值int 为 0、引用为 null越界是运行时异常。String 高频方法就那一把length()、substring()、indexOf()、contains()、trim()、split()、replace()、startsWith等全部返回新串。StringBuildernew→append→toString()三步循环拼接的唯一正确姿势。数组按下标对应多份数据的痛点引出了下一章的主角。下一章是全系列的地基类与对象——字段、方法、构造器、this 与 static。我们会把姓名成绩班组封装成一个真正的工人对象亲手解决本章结尾的数据错位问题。

相关新闻

KMS_VL_ALL_AIO:Windows系统激活终极解决方案,3分钟解决激活难题

KMS_VL_ALL_AIO:Windows系统激活终极解决方案,3分钟解决激活难题

KMS_VL_ALL_AIO:Windows系统激活终极解决方案,3分钟解决激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活问题而烦恼吗?每天面对…

2026/9/24 0:26:18 阅读更多 →
3个简单步骤:快速安装RTL88x2BU无线网卡驱动,让Linux WiFi满速运行

3个简单步骤:快速安装RTL88x2BU无线网卡驱动,让Linux WiFi满速运行

3个简单步骤:快速安装RTL88x2BU无线网卡驱动,让Linux WiFi满速运行 【免费下载链接】RTL88x2BU-Linux-Driver Realtek RTL88x2BU WiFi USB Driver for Linux 项目地址: https://gitcode.com/gh_mirrors/rt/RTL88x2BU-Linux-Driver 还在为Linux系统…

2026/9/24 1:43:08 阅读更多 →
华硕笔记本性能控制终极指南:轻量级开源工具G-Helper完整教程

华硕笔记本性能控制终极指南:轻量级开源工具G-Helper完整教程

华硕笔记本性能控制终极指南:轻量级开源工具G-Helper完整教程 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenb…

2026/9/24 15:06:06 阅读更多 →

最新新闻

客服Agent从Demo到生产:30天审查改造全记录

客服Agent从Demo到生产:30天审查改造全记录

1. 事件背景:FDE接到的不是Demo,是一个"半成品生产事故预案"事情要从一个普通的周三说起。客户经理跑过来跟我说,某电商客户那边的客服Agent Demo已经演示完了,对方觉得效果不错,想在一个月内上生产。Demo我…

2026/9/24 22:06:07 阅读更多 →
全栈AI修图Agent实战:从意图识别到多端适配

全栈AI修图Agent实战:从意图识别到多端适配

一个“会聊天的模型”和一个“会干活的模型”之间,差的不是算力,而是一整套把它架到生产环境里的工程链路。做这个全栈 AI 修图 Agent 项目,我最大的感受是:真正决定体验好坏的不是单次修图效果有多惊艳,而是用户用自然…

2026/9/24 22:06:07 阅读更多 →
AI Agent落地指南:从对话生成到任务执行的智能体实践

AI Agent落地指南:从对话生成到任务执行的智能体实践

外滩大会的现场,我站在金融科技展区的一角,看着大屏上那个AI在几秒钟内完成了从“分析企业财务数据”到“生成风险评估报告”再到“自动发起合规检查”的全过程。旁边一位做投资的朋友愣了半天,说了句让我印象深刻的话:“以前我们…

2026/9/24 22:06:07 阅读更多 →
全栈AI修图Agent实战:从自然语言到图像处理的工程化实现

全栈AI修图Agent实战:从自然语言到图像处理的工程化实现

1. 项目定位与整体设计思路1.1 这个 Agent 解决什么问题先交代一下背景。这个项目前后做了大概三个半月,核心交付物是一个“能听懂人话、自己拆任务、自己调用工具完成修图”的全栈 AI 修图 Agent,覆盖了 Web 端、H5 和微信小程序三个入口。用户不需要学…

2026/9/24 22:06:07 阅读更多 →
KubeEdge Windows 边缘节点安装包路径穿越分析

KubeEdge Windows 边缘节点安装包路径穿越分析

技术原理与风险范围 归档条目不是普通相对路径 旧逻辑把 tar 头部的 Name 直接与目标目录连接。归档条目可以包含 ../、反斜杠、绝对路径或 Windows 驱动器前缀;只按当前平台的一种写法检查,很容易让另一种语义穿过边界。[1][6] 校验顺序决定边界是否…

2026/9/24 22:06:07 阅读更多 →
YooAsset设计哲学:Manifest契约、Editor沙盒与Runtime可控

YooAsset设计哲学:Manifest契约、Editor沙盒与Runtime可控

1. 这不是一份文档,而是一套资产交付的思维操作系统你打开 Unity 项目,看到 Assets/Plugins/YooAsset 下密密麻麻的 .dll、.json 和 .bytes 文件;你右键点击一个 Prefab,菜单里多出「Build AssetBundle」和「Load Asset」两个选项…

2026/9/24 22:05:06 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →