【Java 基础】字符串StringBuilder、StringBuffer,工具StringJoiner
字符串StringBuilder、StringBuffer,工具StringJoiner
- 一、概述
- 二、StringBuilder
- 三、StringBuffer
- 三、StringBuilder 、StringBuffer相关方法:
- 1、append
- 2、delete
- 3、insert
- 4、setCharAt
- 5、deleteCharAt
- 五、StringJoiner
- 1、add(CharSequence newElement)
- 2、merge(StringJoiner other)
一、概述
- 字符串在编程过程中十分重要,操作字符串是我们程序员的必备技能,并且在自然语言处理中具有重要地位。
- 我们注意到,String字符串本质是一个常量数组。(jdk1.8以前是字符数组char[],jdk1.8以前是字节数组byte[],详情请见前篇文章:【Java基础——字符串 String】概述、相关方法.)
- 常量字符串String每次使用"new"关键字,都会在堆区创建新的对象,使得内存空间得不到有效地利用。
- 变量字符串StringBuilder应运而生,解决了这个问题,它会直接对对象进行修改而不会生成新的对象。
- StringBuilder 和 StringBuffer几乎拥有String的所有常用方法,我们在这里不做赘述。(如有需要,详情请见前篇文章)
- CharSequence接口代表该接口代表类型为字符串,而String、StringBuilder、StringBuffer均实现了该接口(其关系如下图所示)。
- CharSequence接口拥有三个固有方法,实现该接口的三种字符串类均实现了这些方法:
① 获取指定索引的字符:public char charAt(int index);
② 获取字符串长度:public int length();
③ 截取部分字符串:public CharSequence subSequence(int start, int end);
二、StringBuilder
- StringBuilder具有强大的字符串操作功能,我们可以利用它对字符串进行更好的拼接、重组。
- StringBuilder位于lang包下,可以直接使用,无需导包。
可以看到,StringBuilder继承了AbstractStringBuilder类,而在该类中定义的value(本质)为可变数组,同样为字节数组byte[]。
三、StringBuffer
- StringBuffer主要是为了线程安全而存在的,它具有与StringBuilder相同的功能。
- StringBuffer位于lang包下,可以直接使用,无需导包。
可以看到,StringBuffer同样继承了AbstractStringBuilder类,所以它的本质同样为可变数组。
三、StringBuilder 、StringBuffer相关方法:
- StringBuffer相关方法的使用与StringBuilder 大同小异,这里我们以StringBuilder 为例。
- 我们定义StringBuilder 对象 stringBuilder:
StringBuilder stringBuilder;
1、append
- append 方法用于在字符串尾部追加其他类型的值,如int、char、float、double、long、boolean、char[]、String等,并作为参数传入。
- 不同于concat方法生成新字符串,append会修改原字符串,但它还是可以返回一个修改后的字符串。
在原字符串上做修改:
- append 的用法如下:
StringBuilder stringBuilder = new StringBuilder("I");
stringBuilder.append(new char[] {' ','l','o','v','e'});
stringBuilder.append(" ");
stringBuilder.append('U');
stringBuilder.append(".The dream is not ");
stringBuilder.append(true);
stringBuilder.append(",but the love is.");
stringBuilder.append("\n");
stringBuilder.append(521);
stringBuilder.append(" ");
stringBuilder.append(13.14);
System.out.println(stringBuilder);
运行结果如下:
接收返回的StringBuilder 对象:
StringBuilder stringBuilder = new StringBuilder("He");
StringBuilder myString = stringBuilder.append("llo"); //接收返回的新StringBuilder对象
System.out.println(stringBuilder); //打印原StringBuilder对象
System.out.println(myString); //打印新的StringBuilder对象
运行结果如下:
可以看到,获得了相同的结果。
2、delete
- delete 方法用于删除字串,须指定始末位置的索引,作为参数传入;适用于删除整个范围内的字串。
- 与append类似。它同样会修改原字符串,但它还是可以返回一个修改后的字符串。
- delete 的用法如下:
- delete 的用法如下:
StringBuilder stringBuilder = new StringBuilder("Helabcdefglo");
StringBuilder myString = stringBuilder.delete(3,10);
System.out.println(stringBuilder);
System.out.println(myString);
3、insert
- insert 方法用于在指定位置插入其他类型的值,如int、char、float、double、long、boolean、char[]、String等,适用于在已知索引的情况下插入单个字符。
- 第一个参数为插入位置索引,第二个参数为想要插入的值。
- 与append、delete类似。它同样会修改原字符串,但它还是可以返回一个修改后的字符串。
- insert 的用法如下:
StringBuilder stringBuilder = new StringBuilder("Hello, am Mike. to meet you!");
stringBuilder.insert(6,'I');
stringBuilder.insert(16,"Nice");
运行结果如下:
接收返回的StringBuilder 对象:
StringBuilder stringBuilder = new StringBuilder("I you.");
StringBuilder myString = stringBuilder.insert(2,"love");
System.out.println(stringBuilder);
System.out.println(myString);
运行结果如下:
可以看到,结果相同。
4、setCharAt
- setCharAt 方法用于修改指定位置的字符,适用于在已知索引的情况下修改改单个字符。
- 第一个参数为需修改字符的位置索引,第二个参数为修改后的字符。
- setCharAt是五个方法中,唯一没有返回值的方法,这意味着它只能在原字符串上进行修改。
- setCharAt 的用法如下:
StringBuilder stringBuilder = new StringBuilder("I lova you.");
stringBuilder.setCharAt(5,'e');
System.out.println(stringBuilder);
运行结果如下:
5、deleteCharAt
- deleteCharAt 方法用于删除指定位置的字符,适用于在已知索引的情况下删除单个字符。
- 参数为需修改的字符位置索引为需删除字符的位置索引。
- 与append、delete、insert类似。它同样会修改原字符串,但它还是可以返回一个修改后的字符串。
- 与append、delete、insert类似。它同样会修改原字符串,但它还是可以返回一个修改后的字符串。
- deleteCharAt 的用法如下:
StringBuilder stringBuilder = new StringBuilder("I lovae you.");
StringBuilder myString = stringBuilder.deleteCharAt(5);
System.out.println(stringBuilder);
System.out.println(myString);
运行结果如下:
五、StringJoiner
- StringJoiner 位于util包下,所以使用前需要导包,不可直接使用。
- StringJoiner 依赖StringBuilder实现,性能和StringBuilder差不多,同样也是非线程安全的。
- StringJoiner 用于。。。
现在我们来介绍其相关方法:
1、add(CharSequence newElement)
- 可以看到,传入的参数,需实现CharSequence接口(该接口代表类型为字符串),而String、StringBuilder、StringBuffer均实现了该接口,所以均可作为参数传入,并进行处理。
- add 返回值为StringJoine,我们可以接收它,并生成一个新的StringJoiner对象。
- add 的用法如下:
StringJoiner sj = new StringJoiner(",","[","]");
//构建字符串
String str = "I";
StringBuilder strBu = new StringBuilder("Love");
StringBuffer strBf = new StringBuffer("you");
//添加字符串
sj.add(str);
sj.add(strBu);
//添加字符串,并接收返回的StringJoiner对象
StringJoiner mySj = sj.add(strBf);
//打印结果
System.out.println(sj);
System.out.println(mySj);
运行结果如下:
2、merge(StringJoiner other)
- merge 方法用于连接两个StringJoiner 对象,并修改调用该方法的StringJoiner 对象。
- merge 返回值为StringJoine,我们可以接收它,并生成一个新的StringJoiner对象。
StringJoiner sj = new StringJoiner(",","[","]");
//构建字符串
String str = "I";
StringBuilder strBu = new StringBuilder("Love");
StringBuffer strBf = new StringBuffer("you");
//添加字符串
sj.add(str);
sj.add(strBu);
sj.add(strBf);
//连接StringJoiner对象,并接收返回的StringJoiner对象
StringJoiner mySj = sj.merge(sj);
//打印结果
System.out.println(sj);
System.out.println(mySj);
运行结果如下:
【Java 基础】字符串StringBuilder、StringBuffer,工具StringJoiner相关推荐
- Java 集合 --- String, StringBuilder, StringBuffer
Java 集合 --- String, StringBuilder, StringBuffer String String的声明方式 String的不可变性 对比两个String StringBuil ...
- Java基础教程:JavaArrays工具类
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念.Java不但可以用来开发网站后台.PC客户端和AndroidAPP,还在数据分析.网络爬虫 ...
- java基础-字符串String
今天要介绍的知识点为String,也叫字符串.这是个应用的比较广泛并且充满神奇色彩的知识点.为什么说神奇呢?因为它涉及了好些个看起来高深莫测的概念.并且,这个知识点其实已经属于java中引用类型的知识 ...
- java基础----String、StringBuffer、StringBuilder
1.String package com.henu;public class Demo05 {public static void main(String[] args) {/** 字符串是常量:它们 ...
- Java基础-String、StringBuffer、StringBuilder的区别
转载:https://www.cnblogs.com/su-feng/p/6659064.html 转载于:https://www.cnblogs.com/spenserliu/p/9850348.h ...
- java 字符串缓冲区_详解Java中字符串缓冲区StringBuffer类的使用
StringBuffer 是一个线程安全的可变的字符序列.它继承于AbstractStringBuilder,实现了CharSequence接口. StringBuilder 也是继承于Abstrac ...
- Java回顾-String/StringBuilder/StringBuffer
一.String的特点 1.String类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 2.String是一个final类,代表不可变字 ...
- frida需要Java基础吗_Android Hook工具之Frida 基础使用
在上一篇文章Android Hook工具之Frida 安装配置教程 中讲解了如何安装配置Frida工作环境,这篇文章主要讲解一下Frida的基础使用方式. 在运行以下任何命令之前必须先启动手机中的fr ...
- JAVA基础-字符串
一,字符串的声明和赋值: String 变量名 = "ssssss"; 注意:声明的字符串必须经过初始化才能使用! 二,字符串的创建: 1.因为java中把字符串作为对 ...
- Java基础强化训练——开发工具及输出语句训练
1:使用IDEA开发一个Java程序建立一个Java应用项目: (1)开发一个类,类名称为Test01,并定义主方法: (2)在主方法中输出一个字符串" 您好!我是XXX." // ...
最新文章
- Win8 Metro(C#)数字图像处理--2.52图像K均值聚类
- 从编程基础到系统设计,这份数据工程师面试宝典全都有 | 资源
- Maximum Product of Word Lengths
- 甘肃关于领取软考2021年上半年合格证书的通知
- SequoiaDB 巨杉数据库
- Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案
- noip模拟赛 遭遇
- 用jackson转json_用Jackson编写大JSON文件
- halcon识别ocr汉字_手写汉字识别——手写文本快速电子化的好方法
- 对话Google全球VP Jay Yagnik:TensorFlow2.0会强化可控性
- 华为实习面经(技术面+主管面)
- sql2000 挂起 注册表
- 【OI做题记录】【BZOJ】【Usaco2008 Mar】土地购买
- 公路广告牌问题(Highway Billboard Problem)--动态规划
- mysql数据库之ddl语句盘点
- 市场渐冷,交易所拉锯战愈烈,牛熊无阻,我在乌镇等你
- 用Arduino实现跨年倒计时
- docker开放端口
- 【报告分享】2021上半年移动广告流量观察白皮书-APP GrowingMob研究院七麦数据(附下载)
- iOS:如何在xcode设置app图标打包项目ipa