老生常谈Java字符串进阶(必看篇)
发布时间 - 2026-01-11 01:55:30 点击率:次前言

最常用的对字符串操作的类有三个,分别是String,StringBuilder,StringBuffer,下面将会详细的说说这三个类......
String
String类代表字符串,这个是最基本的对字符串的类,这个也是使用比较多的类,这里就不再详细介绍了
构造
new String(String str)
new String(StringBuilder str)
new String(StringBuffer str)
new String(byte[] bys,String charsetName) 通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。
常用方法
str charAt(int index) 返回指定索引处的字符
String concat(String str) 将指定字符串str连接到此字符串的结尾,返回连接成功后的字符,因此需要接受才能有效果
boolean contains(CharSequence s) 判断此字符串是否包含指定的char值序列,这里的 CharSequence是一个接口,可以直接使用它的子类作为参数(String,StringBuffer,StringBuild)
static String copyValueOf(char[] c) 将字符数组变成字符串并且返回
static String copyValueOf(char[] c,int off,int count) 将截取的字符数组变成字符串并且返回,off是开始截取的下标,count是截取的个数
boolean endWith(String s) 判断字符串是否是以s结尾
boolean equals(Object o) 用于比较
int indexOf(char c) 返回字符c在字符串中第一次出现的索引
int indexOf(char c,int fromIndex) 从指定索引处开始搜索,查找第一次出现的索引
int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str,int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
boolean isEmpty()
int length()
boolean matches(String regex) 是否匹配正则表达式
trim() 返回字符串的副本,忽略前导空白和尾部空白。
String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。
String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。
char[] toCharArray() 将此字符串转换为一个新的字符数组。
byte[] getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组
注意
上面的new String(byte[] bys,String charsetName)这个构造方法很重要,它可以改变字符串的编码集(和byte[] getBytes(Charset charset))配合着使用,下面我们来看一个例子,代码如下:
/*
* InputStreamReader实现了将字节流FileInputStream转换为字符流,然后使用转换来的字节流创建高效流,从而实现高效的读写
*/
/*
* 编码集(我的eclipse编辑器默认的是utf-8
* 下面将中文字符串的编码集变为GBK写入a.txt文件,因为a.txt默认的是utf-8的因此这里在文件中显示的是乱码
* 然后我们读出来的还是GBK的,因为我们写入的是GBK编码集的,但是我的eclipse是utf-8的编码集,因此在控制台上输出的还是乱码
* new String(byte[] bys,String
* charsetName)使用这个构造方法将byte数组改变编码集并且转换为utf-8格式的,那么这次在控制台上输出的就不乱码了
*/
// 将GBK格式的中文写入a.txt文件
File file = new File("src/a.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
String str = "中";
byte[] by = str.getBytes("GBK"); // 将字符串改为GBK编码集
fileOutputStream.write(by);
fileOutputStream.close();
//从a.txt文件中读取中文
FileInputStream fileInputStream = new FileInputStream(file);
int len;
byte[] bys = new byte[4];
while ((len = fileInputStream.read(bys)) != -1) {
System.out.println(new String(bys, "GBK"));
}
fileInputStream.close();
StringBuffer
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。当然最重要的一点就是线程安全,我们可以从它的源码中可以看出,对于一些操作(append,insert..)都是使用了线程控制块来实现同步,适合与多线程下的使用,源代码如下:
public synchronized StringBuffer append(Object obj) {
super.append(String.valueOf(obj));
return this;
}
public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}
public synchronized StringBuffer delete(int start, int end) {
super.delete(start, end);
return this;
}
/**
* @throws StringIndexOutOfBoundsException {@inheritDoc}
* @since 1.2
*/
public synchronized StringBuffer deleteCharAt(int index) {
super.deleteCharAt(index);
return this;
}
构造
new StringBuffer(StringBuilder str)
new StringBuffer(String str)
常用的方法
StringBuffer append(str)将指定类型的str追加到此字符串的后面(String,char,char[],int,double,float,long,StringBuffer,StringBuilder)
StringBuffer insert(int offest, str) 将指定类型的str插入到此序列中,offest表示开始插入的位置的索引,类型有 String,char,char[],int,double,float,long,StringBuffer,StringBuilder
String delete(int fromIndex,int endIndex) 移除此序列中的字符串并且返回新的缓冲字符串
StringBuffer reverse() 反转字符串
String substring(int start) 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
String substring(int start, int end) 返回一个新的 String,它包含此序列当前所包含的字符子序列。
StringBuffer deleteCharAt(int index) 移除此序列指定位置的 char。
int length() 长度
String toString() 返回此序列中数据的字符串表示形式。
StringBuilder
建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。但是这个类不是线程安全的,只适合单线程,如果使用多线程推荐使用StringBuffer,当然使用这个也行,不过需要自己实现同步
构造方法
new StringBuilder(String str)
常用方法
这个类的常用方法和StringBuffer的一样,这里就不再一一列举了,参照上面的即可使用
以上这篇老生常谈Java字符串进阶(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# java字符串进阶
# 零基础写Java知乎爬虫之进阶篇
# Java进阶学习:jar打包详解
# Java 正则表达式入门详解(基础进阶)
# Java异常处理之try...catch...语句的使用进阶
# Java中jqGrid 学习笔记整理——进阶篇(二)
# Java进阶:JNI使用技巧点滴
# Java进阶教程之IO基础
# Java进阶学习:网络服务器编程
# 深入学习Java编程中的字符串的进阶使用
# 开发10年
# 全记在这本Java进阶宝典里了
# 的是
# 转换为
# 将此
# 到此
# 在此
# 它是
# 给大家
# 使用这个
# 多线程
# 移除
# 所包含
# 正则表达式
# 台上
# 都是
# 是一个
# 进阶
# 将会
# 子类
# 就不
# 老生常谈
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
如何为不同团队 ID 动态生成多个“认领值班”按钮
网页设计与网站制作内容,怎样注册网站?
Laravel怎么判断请求类型_Laravel Request isMethod用法
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
简单实现Android验证码
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
手机网站制作与建设方案,手机网站如何建设?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Laravel怎么在Controller之外的地方验证数据
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
移动端脚本框架Hammer.js
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
昵图网官方站入口 昵图网素材图库官网入口
如何在腾讯云服务器上快速搭建个人网站?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
网站制作报价单模板图片,小松挖机官方网站报价?
如何在云主机上快速搭建多站点网站?
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Laravel如何集成Inertia.js与Vue/React?(安装配置)
JavaScript如何实现错误处理_try...catch如何捕获异常?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
网站建设整体流程解析,建站其实很容易!
如何用PHP快速搭建高效网站?分步指南
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
简单实现Android文件上传
如何在万网ECS上快速搭建专属网站?
轻松掌握MySQL函数中的last_insert_id()
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
如何在万网主机上快速搭建网站?
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
网站制作软件有哪些,制图软件有哪些?
三星、SK海力士获美批准:可向中国出口芯片制造设备

