Java系列(34)——可变字符串
本系列博客汇总在这里:Java系列_汇总
目录
- 一、StringBuffer 概述
- 二、StringBuffer 和 String 的区别
- 三、StringBuffer 的 append 方法
- 四、可变字符串的追加
- 五、StringBuffer 类的部分方法
- 六、可变字符串的修改
- 1、插入
- 2、删除
- 3、替换
- 4、字符串的反转
- 5、某个字符串倒序索引
- 6、以上 3、4、5 示例
一、StringBuffer 概述
StringBuffer:字符串缓冲区。
二、StringBuffer 和 String 的区别
- String一旦被创建后,值不能改变,如果参与了操作,引用发生了变化,不是在原有的字符串上操作,而是产生了一个字符串。但是 StringBuffer 一旦发生改变,就是在原有的基础上改变的。
- 示例
StringString s = “hello”; s += “world”; System.out.println(s);//helloworld
StringBuffer
StringBuffer b = “hello”; b +=”world”;//使用hello的空间追加world,不是创建一个字符串。 System.out.println(s);//helloworld
- 关于线程:
StringBuffer是线程安全的,效率稍低。
三、StringBuffer 的 append 方法
- append 方法
- 示例
package cn.tx;public class Demo {public static void main(String[] args){/*** append(boolean b) 描述:将 boolean参数的字符串表示附加到序列中。*/// 创建可变字符串,因为StringBuffer类里有StringBuffer()构造器,所以可以直接newStringBuffer sb = new StringBuffer();// 把可变字符串做追加字符trueStringBuffer sb1 = sb.append(true);// System.out.println(sb1);// 判断StringBuffer追加后的字符串的地址是否相等System.out.println(sb == sb1);/*** 对比String*/String str = "abc";// 字符串加上任何类型返回的都是字符串,加上字符trueString str1 = str + true;// System.out.println(str1);// 判断String追加后的字符串的地址是否相等System.out.println(str == str1);/*** 其余append()不再演示,详见API*/} }
四、可变字符串的追加
StringBuffer 的构造器
示例
package cn.tx;public class Demo {public static void main(String[] args){// 构造器一StringBuffer sb = new StringBuffer();/*** length() 描述:返回长度(字符数)。*/System.out.println("可变字符串的长度:" + sb.length());/*** capacity() 描述:返回当前容量。*/System.out.println("可变字符串的容量:" + sb.capacity());/*** 追加后*/// 追加后的长度及容量变化,容量默认是16(可指定),未满16,容量不会发生变化sb.append("liuchengjuan^_^kangyanfeng");System.out.println("可变字符串的长度为:" + sb.length() + "容量为:" + sb.capacity());/*** 指定容量的创建*/// 创建一个10个容量的字符串(构造器二)StringBuffer sb1 = new StringBuffer(10);sb1.append("liuchengjuan^_^kangyanfeng");System.out.println("可变字符串的长度为:" + sb1.length() + "容量为:" + sb1.capacity());/*** 带参创建*/// 创建一个带有字符串参数的可变字符串(构造器三)StringBuffer sb2 = new StringBuffer("liuchengjuan^_^kangyanfeng");System.out.println("可变字符串的长度为:" + sb2.length() + "容量为:" + sb2.capacity());} }
五、StringBuffer 类的部分方法
- 更多参见 API
- 示例
package cn.tx;public class Demo {public static void main(String[] args){// 创建可变字符串,开辟一个默认是16 个字符的空间StringBuffer sb = new StringBuffer();sb.append(true).append('q')// 字节.append(new char[] { 'l', 'c', 'j' })// 数组.append("kang")// 字符串.append(100d)// double.append(14.5f)// float.append(13);// intSystem.out.println(sb);// 可变字符串对象的追加Person p = new Person();p.setIdcard("520");p.setName("刘成娟");p.setAge("18");p.setGender("1");// 追加了一个Person类的对象,打印拼接的应该是Person类toString的值sb.append(p);System.out.println(sb);StringBuffer sb1 = new StringBuffer("liuchengjuan");// 可变字符串1追加可变字符串2sb.append(sb1);System.out.println(sb);} }
package cn.tx;public class Person {private String idcard;private String name;private String age;private String gender;public String getIdcard(){return idcard;}public void setIdcard(String idcard){this.idcard = idcard;}public String getName(){return name;}public void setName(String name){this.name = name;}public String getAge(){return age;}public void setAge(String age){this.age = age;}public String getGender(){return gender;}public void setGender(String gender){this.gender = gender;}@Overridepublic String toString(){return "Person [idcard=" + idcard + ", name=" + name + ", age=" + age + ", gender=" + gender + "]";} }
六、可变字符串的修改
StringBuffer 字符串处理。
1、插入
- 示例
package cn.tx;public class Demo {public static void main(String[] args){StringBuffer sb = new StringBuffer("liuchengjuan");// sb.insert(2, true);/*** insert(int offset, String str) 描述: 将字符串插入到此字符序列中。*/// 在指定的索引位置插入字符串,注意不要出现字符串索引越界的问题sb.insert(2, "kang");System.out.println(sb);/*** insert(int offset, char[] str) miaoshu :在此序列中插入 char数组参数的字符串表示形式。*/// 插入数组sb.insert(3, new char[] { 'k', 'y', 'f' });System.out.println(sb);/*** insert(int index, char[] str, int offset, int len) 描述:在此序列中插入* str数组参数的子阵列的字符串表示形式。*/// 第一个参数是要插入的索引位置,第二个参数是要插入的字符数组,第三个参数是数组的起始索引,第四个参数是要插入的长度// 在字符串索引3的位置处插入数组cs索引从1开始往后2长度的字符串char[] cs = { 'j', 'u', 'a', 'n' };sb.insert(3, cs, 1, 2);System.out.println(sb);/*** 其余insert不再演示,详见API*/} }
2、删除
- 示例
package cn.tx;public class Demo {public static void main(String[] args){StringBuffer sb = new StringBuffer("juan");/*** delete(int start, int end) 描述: 删除此序列的子字符串中的字符。*/// 第一个是删除的开始索引,第二个是结束索引(删除包含开始索引,不包含结束索引)// 有点数组越界的味道,但是不是数组越界,此处没有这个概念sb.delete(2, 4);System.out.println(sb);/*** deleteCharAt(int index) 描述:删除 char在这个序列中的指定位置。*/// 删除指定索引位置的字符(此处有越界的概念 )sb.deleteCharAt(1);System.out.println(sb);} }
3、替换
4、字符串的反转
5、某个字符串倒序索引
6、以上 3、4、5 示例
- 示例
package cn.tx;public class Demo {public static void main(String[] args){StringBuffer sb = new StringBuffer("juan");/*** replace(int start, int end, String str) 描述:用指定的String中的字符替换此序列的子字符串中的 String。*/// 第一个参数是替换的开始索引,第二个参数是替换的结束索引,第三个参数是替换的字符串sb.replace(1, 3, "kang");System.out.println(sb);/*** reverse() 描述:导致该字符序列被序列的相反代替。*/// 字符串反转sb.reverse();System.out.println(sb);/*** lastIndexOf(String str) 描述:返回指定子字符串最右边出现的字符串内的索引。*/// 获得倒数第一次出现的字符串索引int lastIndex = sb.lastIndexOf("n");System.out.println(lastIndex);/*** lastIndexOf(String str, int fromIndex) 描述:返回指定子字符串最后一次出现的字符串中的索引。*/// 获得从指定的索引开始向前数,找到倒数第一次出现的字符串出现的索引int lastIndex1 = sb.lastIndexOf("n", 5);System.out.println(lastIndex1);} }
如有错误,欢迎指正!
Java系列(34)——可变字符串相关推荐
- Java 1.1.3 修改字符串、不可变字符串
修改字符串 String类没有提供用于修改字符串的方法.如果希望将 greeting 的内容修改为" Help!", 不能直接地将 greeting的最后两个位置的字符修改为 ' ...
- Java系列之:生成Json字符串
Java系列之:生成Json字符串 一.拼接Json字符串 二.使用JSONObject()生成字符串 一.拼接Json字符串 import com.alibaba.fastjson.JSONObje ...
- Java系列之:ObjectMapper实现对象转化为Json、集合转化为Json、Json转化为对象、Json转化为JsonNode、JsonNode转化为Json字符串
Java系列之:ObjectMapper实现对象转化为Json.集合转化为Json.Json转化为对象.Json转化为JsonNode.JsonNode转化为Json字符串 一.创建类Dataset ...
- java idwork长度_java 字符串id
Java FutureTask import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.c ...
- 【java学习】String字符串
1,概念 1)String 不可变 不可变类:final,不可被继承. public final class String implements java.io.Serializable, Compa ...
- 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token...
为什么你学不会递归?告别递归,谈谈我的一些经验 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! 可 ...
- Java系列一些小计
Java基础视频 张孝祥JAVA视频教程完整版RMVB东西网 历经5年锤炼史上最适合初学者入门的Java基础视频传智播客 张孝祥2010年贺岁视频Java高新技术传智播客 Java多线程与并发库高级应 ...
- 【原】Java学习笔记022 - 字符串
1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // ...
- c语言实现将字符串首尾*删除,java 编写函数将字符串的首尾空格删除。
String 类有个方法去除字符串首位空格: str.trim(); 查看源代码: public String trim() { int len = value.length; int st = ; ...
最新文章
- 清晰易懂的Focal Loss原理解释
- 独家 | 指南:不平衡分类的成本敏感决策树(附代码链接)
- hdu 1003 Max Sum 解题报告
- Oracle数据库之PL/SQL
- 如何解决java乱码_java如何解决乱码
- Netty事件传播机制
- 在idea中为类和方法自动生成注释
- 鸟哥:程序员应该不断提升自身的不可替代性
- 余姚中考能用计算机吗,2018年余姚中考政策有大变化,2020年取消奖励加分项目...
- leetcode题解167-两数之和 II - 输入有序数组
- Oracle笔记(一) Oracle简介及安装
- css取消聚焦边框[Chrome,Safari]
- mysql 存储session
- android开机动画多长时间_Android开机动画及黑屏
- 进销存excel_excel进销存仓库表格同步手机操作
- exePath must be specified when not running inside a stand alone exe
- 解决undefined reference to `WinMain'
- Windows搭建SFTP文件服务器
- c++11:计算时间差(毫秒)
- 借贷系统后台操作说明