Java中StringBuffer类
StringBuffer:
线程安全的可变字符串。
StringBuffer和String的区别?
前者长度和内容可变,后者不可变。
如果使用前者做字符串的拼接,不会浪费太多的资源。
StringBuffer的构造方法:
public StringBuffei():无参构造方法
public StringBuffer(int capacity):指定容量的字符串缓冲区对象
public StringBuffer(String str):指定字符串内容的字符串缓冲对象
StringBuffer的方法:
public int capacity():返回当前容量。 理论值
public int length():返回长度(字符数)。 实际值
public static void main(String[] args) {
//public StringBuffei():无参构造方法
StringBuffer sb = new StringBuffer();
System.out.println("sb:"+sb);//sb:
System.out.println("sb.capacity():"+sb.capacity());//16
System.out.println("sb.length():"+sb.length());//0
//public StringBuffer(int capacity):指定容量的字符串缓冲区对象
StringBuffer sb2 = new StringBuffer(50);
System.out.println("sb2:"+sb2);//sb2:
System.out.println("sb2.capacity():"+sb2.capacity());//50
System.out.println("sb2.length():"+sb2.length());//0
//public StringBuffer(String str):指定 字符串内容的字符串缓冲对象
StringBuffer sb3 = new StringBuffer("hello");
System.out.println("sb3:"+sb3);//sb3:hello
System.out.println("sb3.capacity():"+sb3.capacity());//21
System.out.println("sb3.length():"+sb3.length());//5
}
/**StringBuffer的添加功能:*/
//public StringBuffer append(String str):可以把任意类型添加到字符串缓冲区里面
public static void main(String[] args) {
//创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();
//public StringBuffer append(String str)
StringBuffer sb2 = sb.append("hello");
System.out.println("sb:"+sb);//hello
System.out.println("sb2:"+sb2);//hello
System.out.println(sb == sb2);//true
//使用append一步一步的添加数据
sb.append("hello");
sb.append("true");
sb.append("12");
sb.append("34.56");
System.out.println(sb);//hellohellotrue1234.56
//使用链式编程
sb.append("hello").append("true").append("12").append("34.56");
System.out.println(sb);//hellohellotrue1234.56
//public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
sb.insert(5,"world");
System.out.println(sb);//helloworldhellotrue1234.56
sb.insert(2,"world");
System.out.println(sb);//heworldllohellotrue1234.56
}
/**StringBuffer的删除功能*/
//public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
//public StringBuffer delete(int start,int end):删除从指定位置开始到指定位置结束的功能,并返回本身
public static void main(String[] args) {
//创建对象
StringBuffer sb = new StringBuffer();
//先对空的sb进行添加
sb.append("hello").append("world").append("java");
System.out.println("sb:"+sb);//helloworldjava
//public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
//需求:删除e字符
sb.deleteCharAt(1);//hlloworldjava
//如果这个时候我还要删除第一个l 因为值已经变成了hlloworldjava 所以 还是索引值还是1
sb.deleteCharAt(1);//hloworldjava
//使用public StringBuffer delete(int start,int end):删除从指定位置开始到指定位置结束的功能,并返回本身
StringBuffer sb = new StringBuffer("helloworldjava");
sb.delete(5,10);//hellojava //包左不包右
sb.delete(0,sb.length());//没有值 都删除了
}
/**StringBuffer的替换功能*/
//public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
public static void main(String[] args) {
//创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();
//添加数据
sb.append("hello");
sb.append("world");
sb.append("java");
//public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
//需求:我要将world替换为"节日快乐"
sb.replace(5,10,"节日快乐");//hello节日快乐java
}
/**StringBuffer的反转功能*/
//public StringBuffer reverse():反转字符串
public static void main(String[] args) {
//创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();
//添加数据
sb.append("我爱java,java不爱我"):
System.out.println(sb);//我爱java,java不爱我
//public StringBuffer reverse()
sb.reverse();
System.out.println(sb);//我爱不avaj,avaj爱我
}
/**StringBuffer的截取功能*/
//public String substring(int start):输入索引 索引之前的元素将会被截取调 索引本身不会
//public String substring(int start,int end):截取索引之间的数,包左不包右 这两个都不会改变原来的值
public static void main(String[] args) {
//创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();
System.out.println(sb);//helloworldjava
//添加数据
sb.append("hello").append("world").append("java");
//截取功能
//public String substring(int start)
String s = sb.substring(5);
System.out.println(s);//worldjava
System.out.println(sb);//helloworldjava
}
public static void main(String[] args) {
//创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();
System.out.println(sb);//helloworldjava
//添加数据
sb.append("hello").append("world").append("java");
//截取功能
//public String substring(int start,int end)
String s = sb.substring(5,10);
System.out.println(s);//world
System.out.println(sb);//helloworldjava
}
/**StringBuffer和String的相互转换*/
//那我们为什么要用类之间的转换呢?
A -- B的转换
我们把A转换为B,其实是为了使用B的功能。
B -- A的转换
我们可能要的结果是A类型,所以还得转回来。
public static void main(String[] args) {
//String -- StringBuffer
String s = "hello";
//注意:不能把字符串的值直接赋值给StringBuffer
//StringBuffer sb = "hello";
//StringBuffer sb = s;//应该用下面两种方式
//方式1:通过构造方法
StringBuffer sb = new StringBuffer(s);
//方式2:通过append()方法:
StringBuffer sb2 = new StringBuffer();
sb2.append(s);
System.out.println(sb);//hello
System.out.println(sb2);//hello
//StringBuffer -- String
StringBuffer buffer = new StringBuffer("java");
//将StringBuffer类型的buffer转换为String类型有下面两种方法
//String(StringBuffer buffer)
//方式1:通过构造方法
String str = new String(buffer);
//方式2:通过toString()方法
String str2 = buffer.toString();
System.out.println(str);//java
System.out.println(str2);//java
}
StringBuffer的面试题:
1.//String,StringBuffer,StringBuilder的区别?
答:A:String是内容是不可变的,而StringBuffer,StringBuilder都是内容可变的。
B:StringBuffer是同步的,数据安全,效率低,StringBuilder是不同步的,数据不安全,效率高。
2.//StringBuffer和数组的区别?
答:二者都可以看出是一个容器,装其他的数据。
但是,StringBuffer的数据最终是一个字符串数据。
而数组可以安置多种数据,但必须是同一种类型。
3.//形式参数问题 String作为参数传递 StringBuffer作为参数传递?
形式参数:
基本类型:形式参数的改变不影响实际参数
引用类型:形式参数的改变直接影响实际参数
注意:
String作为参数传递,效果和基本类型作为参数传递是一样的。
代码:
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
System.out.println(s1 + "---" + s2);// hello world
change(s1, s2);
System.out.println(s1 + "---" + s2);// hello world
StringBuffer sb1 = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("world");
System.out.println(sb1 + "---" + sb2);// hello world
change(sb1, sb2);
System.out.println(sb1 + "---" + sb2);// hello worldworld
}
private static void change(StringBuffer sb1, StringBuffer sb2) {
sb1 = sb2;
sb2.append(sb1);
}
private static void change(String s1, String s2) {
s1 = s2;
s2 = s1 + s2;
}
/**字符串判断对称功能的案例*/
public class Atest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数据");
String a = sc.nextLine();
boolean falg = isScme(a);
System.out.println(falg);
}
public static boolean isScme(String a) {
char[] arr = a.toCharArray();
for (int start = 0, end = arr.length - 1; start <= end; start++, end--) {
if (arr[start] != arr[end]) {
return false;
}
}
return true;
}
}
改进:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数据");
String a = sc.nextLine();
boolean falg = isScme(a);
System.out.println(falg);
}
public static boolean isScme(String a) {
return new StringBuffer(a).reverse().toString().equals(a);
}
Java中StringBuffer类的更多相关文章
- JAVA中StringBuffer类常用方法详解
String是不变类,用String修改字符串会新建一个String对象,如果频繁的修改,将会产生很多的String对象,开销很大.因此java提供了一个StringBuffer类,这个类在修改字符串 ...
- JAVA中StringBuffer类常用方法
String是不变类,用String修改字符串会新建一个String对象,如果频繁的修改,将会产生很多的String对象,开销很大.因此java提供了一个StringBuffer类,这个类在修改字符串 ...
- Java中StringBuffer类的常用方法
StringBuffer:StringBuffer类型 描述:在实际应用中,经常回遇到对字符串进行动态修改.这时候,String类的功能受到限制,而StringBuffer类可以完成字符串的动态添加. ...
- Java中StringBuffer类append方法的使用
public static void testAppend() { StringBuffer sb = new StringBuffer("This is a StringBuffer!&q ...
- 【转】JAVA的StringBuffer类
[转]JAVA的StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBu ...
- Java基础-StringBuffer类与StringBuilder类简介
Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...
- 在java中String类为什么要设计成final?
大神链接:在java中String类为什么要设计成final? - 程序员 - 知乎 我进行了重新排版,并且更换了其中的一个例子,让我们更好理解. String很多实用的特性,比如说“不可变性”,是工 ...
- Java中String类为什么被设计为final?
Java中String类为什么被设计为final 首先,String是引用类型,也就是每个字符串都是一个String实例.通过源码可以看到String底层维护了一个byte数组:private f ...
- 基础知识(05) -- Java中的类
Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...
随机推荐
- Centos 8 上安装 Consul
/* 1. 下载二进制安装文件 */下载地址:https://www.consul.io/downloads.html /* 2. 解压缩安装包 */unzip consul_1.6.2_linux_ ...
- 怎么在三层架构中使用Quartz.Net开源项目(与数据库交互)
1.首先在项目中先创建一个控制台应用程序 2.然后右击项目中的[引用],可以[添加引用],也可以[管理NuGet程序包],作者使用的是[添加引用],添加本地应用.版本不同,所使用的方式不同.需要此版本 ...
- sql mysql数据库导库 panda pymysql
mysql数据库 导入数据 1. panda 效率超高 对内存要求高 网络稳定性 # 读取文件 ratings_names = ['user_id', 'movie_id', 'ratings', ' ...
- MATLAB 动图绘制、保存
动图有gif格式和视频的avi格式. 1.sin(x)动图 clear all h = animatedline;%动画线 axis([0 4*pi -1 1]) box on x = linspac ...
- python学习第四节 迭代器 生成器
1:什么是迭代 可以直接作用于for循环的对象统称为可迭代对象(Iterable). 可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator). 所有的Iterable均可以通 ...
- k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦
背景 系统版本:CentOS7 Jenkins版本:2.222.1 maven版本:apache-maven-3.6.3 Java版本:jdk1.8.0_231 Git版本:1.8.3.1 docke ...
- HDU1166(线段树 +更新单点,求区间总和)、HDU1754(线段树 + 更新单点,求区间最大值)
线段树简单应用 先附上几张图便与理解,大佬文章传送门1.传送门2 HDU1166:题目描述 线段树 +更新单点,求区间总和 代码如下(递归版) #include<iostream> #in ...
- stm32:extern关键字
参考:http://c.biancheng.net/view/404.html 1.在一个文件中: #include <stdio.h> int max(int x,int y); int ...
- 3-1. 基于epoll架构的视频采集端设计
精通epoll架构 epoll:Linux中最优秀的多路复用机制! 与select .poll区别 1.select和poll没有太大区别,除了select有文件描述符限制(1024个).select ...
- PTA数据结构与算法题目集(中文) 7-15
PTA数据结构与算法题目集(中文) 7-15 7-15 QQ帐户的申请与登陆 (25 分) 实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式 ...