在Java中如何使用String类处理文本_Java字符串常用方法解析

发布时间 - 2026-01-04 00:00:00    点击率:
Java String不可变,所有修改操作均返回新对象;replace()等方法不改变原字符串,需重新赋值;substring取左闭右开区间;运行时拼接用StringBuilder更高效;比较字符串内容须用equals()而非==。

Java 的 String 类不可变,所有“修改”操作实际都返回新对象——这是绝大多数字符串误用问题的根源。

为什么 replace() 没生效?

因为 String 是不可变的,replace()toUpperCase()trim() 等方法从不修改原字符串,而是返回新实例。

  • 常见错误:
    String s = "  hello  ";
    s.replace(" ", "");
    s.trim();
    System.out.println(s); // 输出仍是 "  hello  "
  • 正确写法:必须重新赋值
    String s = "  hello  ";
    s = s.replace(" ", ""); // 注意这里赋值了
    s = s.trim();           // 也必须赋值
    System.out.println(s); // 输出 "hello"
  • 链式调用更安全:
    String result = s.trim().replace(" ", "").toLowerCase();

substring() 的边界到底怎么算?

substring(int beginIndex, int endIndex) 取的是 左闭右开区间,即包含 beginIndex,但不包含 endIndex。越界会抛 StringIndexOutOfBoundsException

  • "abc".substring(1, 2)"b"(索引 1 是 b,索引 2 是 c,但不包含)
  • "abc".substring(1)"bc"(单参数版本从指定位置到末尾)
  • 容易踩坑:用 length()endIndex 时别加 1,s.substring(0, s.length()) 才是完整字符串
  • 空字符串或 null 判断必须前置,否则直接调用会 NPE

拼接字符串该用 + 还是 StringBuilder

编译期确定的字面量拼接(如 "a" + "b" + "c")会被 JVM 优化为单个常量;但运行时变量拼接(尤其循环中)用 + 会产生大量中间 String 对象,性能差。

立即学习“Java免费学习笔记(深入)”;

  • 少量、非循环拼接:str1 + str2 + "static" 可读性好,没问题
  • 循环内拼接(如构建日志、SQL):
    StringBuilder sb = new StringBuilder();
    for (String item : list) {
        sb.append(item).append(",");
    }
    String result = sb.toString(); // 最后才转 String
  • 注意:不要在循环里反复调用 sb.toString(),它每次都会新建对象
  • JDK 9+ 对 + 做了部分优化,但逻辑复杂时仍推荐显式用 StringBuilder

equals()== 到底该用哪个?

== 比较的是引用地址,equals() 比较的是字符内容。除非明确要判断是否为同一对象(极少见),否则一律用 equals()

  • 常见错误:
    if (s == "hello") { ... } // 错!可能因字符串池机制偶然成功,但不可靠
  • 正确写法:
    if ("hello".equals(s)) { ... } // 推荐把字面量放前面,避免 s 为 null 时 NPE
  • 忽略大小写用 equalsIgnoreCase(),别用 toLowerCase().equals()(创建多余对象)
  • 空安全判断可结合 Objects.equals(a, b)(JDK 7+),自动处理 null

字符串处理最易被忽略的其实是编码和 null 安全——new String(bytes, charset) 不指定编码名会依赖平台默认split() 遇到 null 输入直接炸,这些地方没日志很难定位。


# java  # 编码  # app  # string类  # 为什么 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现全文搜索功能?(Scout和Algolia示例)  中山网站推广排名,中山信息港登录入口?  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel如何处理表单验证?(Requests代码示例)  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  简单实现jsp分页  lovemo网页版地址 lovemo官网手机登录  如何用JavaScript实现文本编辑器_光标和选区怎么处理  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  JavaScript如何实现路由_前端路由原理是什么  北京企业网站设计制作公司,北京铁路集团官方网站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何快速使用云服务器搭建个人网站?  Laravel如何使用withoutEvents方法临时禁用模型事件  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Android自定义listview布局实现上拉加载下拉刷新功能  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Android仿QQ列表左滑删除操作  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何在宝塔面板中修改默认建站目录?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  如何登录建站主机?访问步骤全解析  如何用搬瓦工VPS快速搭建个人网站?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  高端云建站费用究竟需要多少预算?  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  海南网站制作公司有哪些,海口网是哪家的?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何在阿里云通过域名搭建网站?  如何彻底卸载建站之星软件?  如何注册花生壳免费域名并搭建个人网站?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  如何在腾讯云服务器上快速搭建个人网站?  javascript日期怎么处理_如何格式化输出  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何在阿里云服务器自主搭建网站?  如何续费美橙建站之星域名及服务?