13字符串缓冲区基本类型包装类.docx
《13字符串缓冲区基本类型包装类.docx》由会员分享,可在线阅读,更多相关《13字符串缓冲区基本类型包装类.docx(18页珍藏版)》请在冰豆网上搜索。
![13字符串缓冲区基本类型包装类.docx](https://file1.bdocx.com/fileroot1/2023-6/11/d4cca23a-7f03-492a-b137-643a28108a50/d4cca23a-7f03-492a-b137-643a28108a501.gif)
13字符串缓冲区基本类型包装类
字符串缓冲区、基本类型包装类
1.字符串缓冲区
1.1.字符串缓冲区介绍
1.1.1.缓冲区思想:
举例:
超市的购物车。
在购买商品的过程中,将需要够买的商品先临时存储在购物车中。
这时的购物车就相当于一个容器,给其中添加需要购买的物品。
这里说的这个容器在Java中被称为缓冲区。
Java中也有缓冲区存在。
主要是临时存储一些需要处理的数据,在处理完之后得到一个唯一的结果。
1.1.2.字符串缓冲区
字符串缓冲区:
可以存储字符数据的容器,可以对这个容器中的字符数据进行各种的操作,在操作完成之后,会得到一个唯一的字符串常量,最后把这个字符串常量保存到方法区的常量池中。
如果在操作的过程中,没有操作完成,那么不会在常量池中保存任何数据。
1.1.3.缓冲区常见的操作
缓冲区本身就是一个容器:
它们都具备增删改查操作。
增:
给容器中添加数据
删:
从容器中删除数据
改:
修改容器中的数据
查:
查看容器中的数据
增删改查:
CRUD。
CreateReadUpdateDelete
Java中针对字符串这类数据提供两个缓冲区对象:
StringBuffer
StringBuilder
1.2.StringBuffer介绍
线程安全的可变字符序列。
一个类似于String的字符串缓冲区,但不能修改。
虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
StringBuffer:
它是字符串缓冲区,支持对其中保存的数据进行增删改查操作。
StringBuffer中定义的方法是为增删改查设计的。
1.3.StringBuffer中的方法介绍
1.3.1.添加方法
/*
*演示insert方法
*insert方法接收2个参数:
*第一个参数是需要在容器的哪个位置上开始添加数据
*第二个参数是需要添加的数据
*
*使用insert方法给容器中插入数据的之后,第一个参数指定的下标位置上,
*以及之前的位置上必须保证有数据存在
*/
publicstaticvoidmethod2(){
//创建字符串缓冲区对象
StringBuffersb=newStringBuffer();
sb.append("it");
//插入数据
sb.insert(1,"java");
Strings=sb.toString();
System.out.println(s);
}
1.3.2.删除方法
//删除方法
publicstaticvoidmethod3(){
//创建字符串缓冲区对象
StringBuffersb=newStringBuffer("abcdefg");
/*
*删除方法
*delete(intstart,intend)
*start是起始位置
*end结束位置
*要求start一定要小于等于end
*/
sb.delete(3,3);
//删除指定位置上的字符
sb.deleteCharAt(3);
//将容器中的数据转成字符串
Strings=sb.toString();
System.out.println(s);
}
1.3.3.修改方法
//修改方法
publicstaticvoidmethod4(){
//创建字符串缓冲区对象
StringBuffersb=newStringBuffer("abcdefg");
//修改方法
sb.setCharAt(3,'A');
//将容器中的数据转成字符串
Strings=sb.toString();
System.out.println(s);
}
1.3.4.获取方法
capacity()获取字符串缓冲区的容量例如:
水杯500ML
length()获取到的是字符串中的字符个数例如:
水杯中实际装的水的容量
charAt(intindex)获取字符串缓冲区容器中指定位置上的字符数据
indexOf(Stringstr)
indexOf(Stringstr,intfromIndex)
lastIndexOf(Stringstr)
lastIndexOf(Stringstr,intfromIndex)
reverse()反转字符串缓冲区中的字符
1.3.5.StringBuffer的使用场景
如果程序中需要对字符串中的字符数据进行CRUD的时候,建议先将这个字符串存储到缓冲区中,然后对其进行操作,操作完成之后再重新转成字符串数据。
1.4.StringBuilder介绍
StringBuilder类它是JDK5新增的。
它的功能和StringBuffer一致。
区别:
StringBuffer它在操作容器的时候,增删改查的过程中,不会发生不安全的问题。
StringBuilder它也提供的对容器的增删改查操作,但是不保证安全。
在使用StringBuilder的时候,运行多个操作同时对容器进行。
由于它不保证安全,因此它在操作的时候效率比StringBuffer高。
面试题:
StringBuffer和StringBuilder的区别:
StringBuffer安全的。
StringBuilder不安全。
2.基本类型包装类
2.1.基本类型包装类介绍
第二天学习了8种基本类型:
byteshortintlongfloatdoublecharboolean
这8种基本类型它们在程序仅仅只能规范某个空间的数据类型,并不能按照类的方式去操作这些类型。
inta;在内存中需要开辟一个int类型的空间,空间名称为a
于是sun公司针对这8种基本类型提供了它们各自对应的类类型。
把这些类型统一称为基本类型包装类。
byte------》Byte
short------》Short
int------》Integer
long------》Long
float------》Float
double------》Double
char------》Character
boolean------》Boolean
八种基本类型对应的包装类,除int和char类型之外的其他六个都是关键字的首字母大写。
intInteger
charCharater
2.2.基本类型包装类演示
基本类型对应的包装类中,提供的成员变量,成员变量中保存当前这个类型中可以存储的最大值和最小等静态变量
发现基本类型包装类没有对外提供空参数的构造方法。
因为每个基本类型包装类的对象都需要封装一个对应的基本类型数值。
如果有空参数的构造方法,创建出来的对象并不知道它会将那个基本类型封装成对象。
/*
*演示基本类型包装类
*/
publicclassIntegerDemo{
publicstaticvoidmain(String[]args){
intx=123;
//将基本类型数据转成对应的包装类型
Integeri=newInteger(x);
/*
*在使用基本类型包装类将一个字符串转成对应的包装类对象的时候
*要求指定的字符串中的数据一定可以转成数字,如果字符串中存在一个其他的非
*数字数据,在创建包装类对象的时候就会发生异常。
*/
Integeri2=newInteger("123");
System.out.println(i2);
//调用成员变量
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
System.out.println(i);
System.out.println(Integer.toBinaryString(x));
System.out.println(Integer.toHexString(x));
System.out.println(Integer.toOctalString(x));
}
}
2.3.基本数据和包装类之间转换
2.3.1.基本类型转成包装类
1、使用包装类的构造方法
2、使用类中的静态方法valueOf
2.3.2.将包装类型转成基本类型
使用当前基本类型对应的包装类中的xxxValue方法完成:
2.4.字符串和基本类型数据、包装类型转换
2.4.1.字符串转基本类型
使用基本类型对应的包装类中的parseXxxx方法。
2.4.2.基本类型转字符串
1、String类中提供的静态的valueOf,可以将基本类型转成字符串
2、使用+号链接
3、使用包装类中的静态的toString方法
2.4.3.字符串转包装类型
1、包装类的构造方法
2、包装类中的静态方法valueOf
2.4.4.包装类型转字符串
1、使用String类中的静态的valueOf方法
2、使用包装类中复写了Object的toString方法
2.4.5.总结
基本类型、包装类型、字符串三者之间的转换:
2.5.自动装箱和拆箱
在JDK5中,针对基本类型数据和对应的包装类型之间的转换进行了简化。
自动装箱:
可以把一个基本类型的数据直接赋值给对应的包装类型的引用。
自动拆箱:
可以直接把一个包装类型的引用赋值给基本类型变量。
//自动拆箱
publicstaticvoidmethod2(){
//在jdk5之前将包装类型赋值给基本类型
Integeri=newInteger(123);
intx=i.intValue();
/*
*JDK5之后可以将一个包装类型的数据直接赋值给基本类型变量
*inty=i;
*先将i这个引用所指的对象空间中的基本类型取出,再把这个基本类型的值
*赋值给y变量
*/
inty=i;
/*
*面试题:
*/
//下面的代码发生了自动装箱
Integeri2=123;
/*
*i2=i2+456;
*1、先将i2拆箱成基本类型123数据
*2、在使用123和456计算和值
*3、将和值再装箱成Integer对象,最后把对象的地址赋值给i2
*/
i2=i2+456;
}
2.6.包装类练习
/*
*需求:
对字符串中的数字数据按照它们的字面值进行排序。
*“11-11-1-1011232112101”
*分析:
*需要对字符串进行切割,得到一个字符串数组,这时不能直接对这个对象进行排序
*因为直接排序是按照数组中每个字符串的相同位置上字符的编码值进行大小比较
*而不能按照每个字符串中的数字具体数值进行比较
*
*我们就需要将当前的字符串数组中的每个字符串再转成int类型的数字,然后在比较大小排序
*/
publicclassTest{
publicstaticvoidmain(String[]args){
Strings="11-11-1-1011232112101";
//使用空格切割
String[]strs=s.split("");
//定义一个int类型的数组,用于保存转后的每个int数据
int[]arr=newint[strs.length];
//循环取出字符串数组中的每个字符串数据
for(inti=0;i//将字符串转成int值保存在arr数组中
intx=Integer.parseInt(strs[i]);
arr[i]=x;
}
//循环结束,就表示当前strs数组中的每个字符串都已经被转成int类型的数据保存在arr中
//对arr排序
Arrays.sort(arr);
//将数组转成字符串
//使用字符串缓冲区,临时将需要拼接的数据存储在缓冲区中
StringBuildersb=newStringBuilder();
//循环取出arr中的每个int类型的数据
for(inti=0;isb.append(arr[i]);
sb.append("");
}
//将字符串缓冲区中的数据转成字符串数据
Stringss=sb.toString();
System.out.println(ss);
}
}
3.正则表达式
3.1.正则引入
3.2.正则表达式介绍
3.3.正则演示
3.4.正则常用功能介绍
3.4.1.匹配功能
3.4.2.切割功能
3.4.3.正则中的组
3.4.4.替换功能
3.4.5.获取功能
3.5.正则符号总结