java之StringBuilder和stringbuffer精选
Posted 磊哥的Java历险记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之StringBuilder和stringbuffer精选相关的知识,希望对你有一定的参考价值。
前言:
他强任他强,清风拂山岗.他横任他横,明月照大江
我们上一篇聊到了java之String类,这一片我们聊一下StringBuilder和stringbuffer类,针对于以下的概念,都会有实体例子配合着,给大家演示,希望给历险中的你带来一些帮助!!!
一.介绍
StringBuilder类在 Java 5 中被提出,它和StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer 类。
二.知识点介绍
1、概述
2、StringBuilder和String的区别
3、构造方法
4、方法
5、与String的转换
6、练习
7、String和StringBuffer
三.知识点详解
1、StringBuilder概述
String StringBuilder 内容固定 内容可变
StringBuilder()方法:
capacity()返回当前容量,16
length()返回长度(字符数量)
append()添加数据
reverse()反转
StringBuilder-->String toString()
String-->StringBuiler
StringBuilder(String s)
int arr[]=1,2,3,数组元素格式拼接:"[1,2,3]"
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuilder就可以解决这个问题。
2、StringBuilder和String的区别
String的内容是固定的。StringBuilder的内容是可变的。
3、构造方法
(1)public int capacity():返回当前容量,理论值
(2)public int length():返回长度(字符数),实际值
代码演示:
package Test2;
public class Tested
private final static String name = "磊哥的java历险记-@51博客";
// java类
public static void main(String args[])
//创建对象
StringBuilder builder = new StringBuilder();
//输出对象
System.out.println("builder:"+builder);
//输出容量
System.out.println("builder.capacity():" +builder.capacity());
//输出长度
System.out.println("builder.length():" +builder.length());
4、方法
(1)添加功能:public StringBuilder append(任意类型):添加数据,并返回自身对象
(2)反转功能:public StringBuilder reverse()
代码演示:
package Test2;
public class Tested
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args)
//创建对象
StringBuilder builder = new StringBuilder();
System.out.println("builder:"+builder);
//builder.append("任意类型");
StringBuilder builder2 = builder.append("磊哥的java历险记");
System.out.println("builder2:"+builder2);
System.out.println(builder== builder2); //true
//添加任意类型
builder.append("磊哥");
builder.append("的java历险记");
builder.append(true);
builder.append(100+"----");
//链式编程
builder.append("磊哥").append("的java历险记").append(true).append(100);
System.out.println("builder:"+builder);
//反转
builder.reverse();
System.out.println("builder:"+builder);
5、与String的相互转换
StringBuilder--> String
public String toString():通过toString()就可以实现把StringBuilder转成String
String -->StringBuilder
StringBuilder(Stringstr):通过构造方法就可以实现把String转成StringBuilder
代码演示:
package Test2;
public class Tested
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args)
//StringBuilder-- String
StringBuilder builder = new StringBuilder();
builder.append("hello").append("world");
String s = builder.toString();
System.out.println(s);
//String-- StringBuilder
String s1 = "helloworld";
StringBuilder builder2 = new StringBuilder(s1);
System.out.println(builder2);
6、练习
(1)数组元素格式拼接
举例:int[] arr = 1,2,3;结果:[1, 2, 3]、
代码演示:
package Test2;
public class Tested
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args)
//定义一个数组
int[] arr = 1, 2, 3;
//调用下面方法
String s = arrayToString(arr);
//输出结果
System.out.println("s:" + s);
System.out.println("============="+name+"=============");
/*
* 写方法实现拼接
* 两个明确:
* 返回值类型:String
* 参数列表:int[] arr
*/
public static String arrayToString(int[] arr)
StringBuilder builder = new StringBuilder();
builder.append("[");
//for循环,把数组中每一个数字都要遍历一下
for( int x = 0;x <= arr.length - 1;x++)
//X的值,不能超过数值最大的值
if(x<arr.length - 1)
//添加数值并附上“ ,”
builder.append(arr[x]).append(",");
else
//添加最后一个数值,并添加]
builder.append(arr[x]).append("]");
//创建result接收拼接好的字符串
String result = builder.toString();
//返回result
return result;
(2)字符串反转
代码演示:
package Test2;
import java.util.Scanner;
public class Tested
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args)
//1:键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个字符串:");
String s = sc.nextLine();
//3:调用方法
String result = myReverse(s);
//4:输出结果
System.out.println("result:"+result);
/*
* 2:写方法实现反转
* 两个明确:
* 返回值类型:String
* 参数列表:String
*/
public static String myReverse(String s)
//String -- StringBuilder -- reverse() --String
StringBuilder builder= new StringBuilder(s);
//反转
builder.reverse();
//转化成字符串,返回参数值
String result =builder.toString();
return result;
6.1.题目
(1)例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
6.1.1 实验步骤
(1)键盘录入一个字符串
(2)写方法实现判断一个字符串是否是对称字符串
两个明确:返回值类型:boolean,参数列表:String s
(3)调用方法、输出结果
代码演示:
package Test2;
import java.util.Scanner;
public class Tested
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args)
//1:键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个字符串:");
String s = sc.nextLine();
//3:调用方法
boolean b = isSymmetry(s);
//4:输出结果
System.out.println("b:"+b);
public static boolean isSymmetry(String s)
//把字符串反转,和反转前的字符串进行比较,如果内容相同,就说明是对称字符串
StringBuilder builder = new StringBuilder(s);
builder.reverse();
String result = builder.toString();
//比较
return result.equals(s);
7、String和StringBuffer
String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。
String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。
当我们对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuffer 线程同步(安全),速度慢
StringBuilder 不同步(不安全),速度快
所使用的方法完全一样,在一般情况下,我们会选择StringBuilder来使用
append()
capacity()
charAt()
delete()
deleteCharAt()
indexOf()
insert()
lastIndexOf()
length()
replace()
reverse()
substring()
toString()
7.1 概念
字符串是不可变的,所以每拼写一次字符串均会产生新的对象,而字符串缓冲区是一个可变的字符串临时存储区域。在该区域内存储、拼写需要的字符串,当需要真正的字符串时,再将存储区内的字符串取出,这样全部过程只有一个字符串缓冲区对象,更为高效。
同步安全问题会在多线程的学习后了解。
StringBuffer是线程同步的(安全的),StringBuilder是不同步的(不安全的),二者方法完全一致。
线程同步操作需要消耗更多的系统资源,所以更慢,而在日常开发过程中,同一个字符串的操作通常不会涉及多线程问题,所以在不考虑安全问题的情况下,尽量使用速度更快的StringBuilder。
7.2 常见方法
(1)public StringBuffer append(Xxx xxx) //向字符串缓冲区中添加字符串
(2)public String toString() //将缓冲区内内容返回
代码演示:
package Test2;
import java.util.Scanner;
public class Tested
private final static String name = "磊哥的java历险记-@51博客";
//其他删除、修改、插入等方法可自行查询API
/*
*StringBuffer 字符串缓冲区 线程安全 效率低
* StringBuilder 字符串缓冲区 线程不安全 效率高
*
* publicStringBuffer append(Xxx xxx) //向字符串缓冲区中添加字符串
* publicString toString() //将缓冲区内内容返回
*/
public static void main(String[] args)
String s ="";
for(int i = 0; i < 5; i++)
s+="i love java "+i;
System.out.println(s);
StringBuffer sb = new StringBuffer();
for(int i = 0; i < 5; i++)
sb.append("i lova java "+i);
sb.append(true);
sb.append("$$$");
sb.append("***");
sb.append(new Person());
System.out.println(sb.toString());
7.3 链式调用:
在StringBuffer的方法中,有许多方法的返回值都是该类型本身,如append方法。这时,阅读API后发现,其实返回值就是其本身,这时我们可以继续调用append方法,依次类推,这种调用方法叫做链式调用。
如:
StringBuffer sb = new StringBuffer();
sb.append(“aaa”) .append(“bbb”) .append(“ccc”).append(“ddd”) ;
String data = sb.toString(); //data的结果为aaabbbcccddd
代码演示:
package Test2;
public class Tested
private final static String name = "磊哥的java历险记-@51博客";
/*
* 链式调用
*/
public static void main(String[] args)
StringBuffer sb = new StringBuffer();
// StringBuffers b2 = sb.append("磊哥 ");
// StringBuffer b3 = sb2.append("java历险记 ");
// StringBuffers b4 = sb3.append("_51博客 ");
//
// System.out.println(sb);
// System.out.println(sb2);
// System.out.println(sb3);
// System.out.println(sb4);
sb.append("磊哥").append("java历险记").append("_51博客");
System.out.println(sb);
7.4 代码精炼
在使用数组的时候,我们会提取数组中的元素,那么现在我们完成的是,将数组中的元素一一的提取出来,通过我们的StringBuffer来完成数组中元素的拼接。
7.4.1 题目
(1)将数组44,33,55,11,22拼接成一个字符串:[44,33,55,11,22]
7.4.2 实验步骤
(1)声明一个类Test
(2)在Test类中,声明一个数组a,声明一个arrayToString方法,将数组传递进行完成拼接,最后打印拼接完的结果
代码演示:
package Test2;
import java.util.Scanner;
public class Tested
private final static String name = "磊哥的java历险记-@51博客";
public static void main(String[] args)
// 定义一个数组
int[] arr = 44,33, 55, 11, 22 ;
// 定义功能
// 方式:用StringBuffer做拼接的方式
String s2 = arrayToString(arr);
System.out.println("s2:" + s2);
// 用StringBuffer做拼接的方式,这种方式节省内存空间
public static String arrayToString(int[] arr)
StringBuffer sb =new StringBuffer();
sb.append("[");
for (int x = 0; x< arr.length; x++)
if (x ==arr.length - 1) //最后一个元素
sb.append(arr[x]+"]");
else
sb.append(arr[x]).append(", ");//拼接后为StringBuffer类型的。
return sb.toString();//StringBuffer类下的toString()方法,返回字符串String类型
结语:
与其担心未来,不如现在好好努力。这条路上,只有奋斗才能给你安全感。不要轻易把梦想寄托在某个人身上,也不要太在乎身旁的耳语,因为未来是你自己的,只有你自己能给自己最大的安全感。别忘了答应自己要做的事,别忘记自己想去的地方,不管那有多难,有多远!!!
概念和代码虽多一些,但是我尽量用最简单的话语描述,概念的理解就看兄弟们自己的了,我已经替大家削弱很多了,兄弟们可以动动手敲一敲代码,加深自己的感受~
感谢兄弟们持续关注!
以上是关于java之StringBuilder和stringbuffer精选的主要内容,如果未能解决你的问题,请参考以下文章
Java之String+StringBuffer+StringBuilder
四:Java之字符串操作StringStringBuffer和StringBuilder
Java基础——数组应用之StringBuilder类和StringBuffer类