目录
9、StringBuffer / StringBuilder类
1、String对象存储字符串
(1)三种赋值方法:
①String str1=“BDQN”;
②String s = new String();
③String str2=new String(“BDQN”);
(2)补充说明:
- String类位于java.lang包中,具有丰富的方法:计算字符串的长度、比较字符串、连接字符串、提取字符串;
(3)注意事项:
- String类的valueOf()方法可以将任意数据类型转换为字符串,使用String类名调用该方法;
- 例:String.valueOf(数组变量名);
2、获取字符串长度
(1)语法:
- 字符串.length( );
(2)补充说明:
- 通过String类的length( )方法可以获取到字符串中的字符个数,即字符串的长度;
//例:
if(memID>=10000 && memID <=99999){
//输出虾米号、昵称、密码、生日
//......
System.out.println("注册成功,赠送虾币100枚!");
System.out.print("\n请绑定手机号:");
String phoneNum = input.next();
if (phoneNum.length() == 11) {//通过 phoneNum.length() 判断手机号的长度
System.out.print("手机号绑定成功,赠送5折酒店优惠券!");
} else {
System.out.print("手机号长度必须为11位,请确认! ");
}
}else {
System.out.println("注册失败,虾米号应为5位数字!");
}
3、比较字符串
(1)语法:
- 字符串.equals(字符串2);
(2)补充说明:
- 对比两个字符串对象的内容是否相同的问题,需要使用String类的equals( )方法;
- equals()方法比较原理:依次检查组成字符串内容的字符是否完全一致;
//例:
System.out.print("请输入昵称:");
String username = input.next();
System.out.print("请输入密码:");
String password1 = input.next();
System.out.print("请确认密码:");
String password2 = input.next();
if (!password1.equals(password2)) {//比较两次密码输入是否一致
System.out.print("两次输入的密码不一致,请检查!");
} else {
System.out.print("请输入手机号:");
String phoneNum = input.next();
if (phoneNum.length() == 11) {
System.out.print("注册成功,欢迎您成为【自由虾】会员!");
} else {
System.out.print("手机号长度必须为11位,请检查! ");
}
}
4、字符串忽略大小写
(1)equals( )方法对大小写敏感,若忽略大小写可使用如下方法:
①忽略大小写比较:
- 字符串A.equalsIgnoreCase(字符串B);
②返回字符串的小写形式:
- 字符串.toLowerCase( );
③返回字符串的大写形式:
- 字符串.toUpperCase( );
//例:
System.out.print("请输入用户名:");
String name=input.next();
System.out.print("请输入密码:");
String miMa=input.next();
if(username.equalsIgnoreCase("tom") && password.equals("123456")){
System.out.println("登录成功!");
}else{
System.out.println("用户名或密码错误,登录失败!");
}
5、连接字符串
(1)“+”运算符:
- 使用“+”运算符将字符串和变量连接在一起,“+”运算符会将其他数据类型的值自动转换为String类型;
//例:
String username="丁丁";
int fansNum = 1201;
int gzNum = 105;
String str = "用户名:"+username+" 粉丝数:"+fansNum+" 关注数:"+gzNum;
System.out.println("********个人主页********");
System.out.println(str);
(2)String类的concat()方法:
将一个字符串连接到另一个字符串的末尾;
①语法:
- 字符串.concat(字符串2);
//例:
System.out.print("尊敬的用户".concat(username));
System.out.print("您好,您的密码是".concat(password));
System.out.println(",请妥善保管!");
//或:
System.out.println("尊敬的用户".concat(username).concat("您好,您的密码是")
.concat(password).concat(",请妥善保管!"));
6、提取字符串
(1)常用提取方法:
方 法 | 说 明 |
public int indexOf(int ch) | 搜索第一个出现的字符ch(或字符串value) |
public int indexOf(String value) | |
public int lastIndexOf(int ch) | 搜索最后一个出现的字符ch(或字符串value) |
public int lastIndexOf(String value) | |
public String substring(int index) | 提取从位置索引开始的字符串部分 |
public String substring(int beginindex,int endindex) | 提取beginindex和endindex之间的字符串部分 |
public String trim() | 返回一个前后不含任何空格的调用字符串的副本 |
charAt() | 根据索引获得单个字符; |
(2)注意事项:
①返回出现第一个匹配的位置,如果没有找到字符或字符串,则返回-1;
②beginindex: 字符串的位置从0开始算;endindex: 字符串的位置从1开始算;
//例1:
String str="好记性不如烂键盘";
int index = str.indexOf("如");//得到下标“ 4 ”
//例2:
String str="吃葡萄不吐葡萄皮不吃葡萄倒吐葡萄皮";
int index = str.lastIndexOf("葡");//得到下标“ 14 ”
//例3:
String str="好记性不如烂键盘";
String nStr = str.substring(6);//得到部分字符串:键盘
//例4:
String str="好记性不如烂键盘";
String nStr = str.substring(1, 3);//得到部分字符串:记性
//例5:
String str=" 好记性 不如 烂键盘 ";
String nStr = str.trim( );//输出最左右不含空格的字符串:"好记性 不如 烂键盘"
7、拆分字符串
(1)语法:
- 字符串.split(String regex);
(2)补充说明:
- String类提供了split()方法,将一个字符串分割为子字符串,结果作为字符串数组返回;
- 分隔符:String regex
//例:
public class ScenicSpot {
public static void main(String[] args) {
String spots="崂山、啤酒博物馆、奥林匹克帆船中心、中山公园、崂山、小麦岛、动物园、五四广场、海底世界、八大关、海滨风景区、金沙滩、极地海洋世界、信号山公园、即墨古城、小麦岛、动物园、奥林匹克帆船中心、五四广场、海底世界、海滨风景区、极地海洋世界、金沙滩、五四广场、崂山、海底世界、海滨风景区、极地海洋世界、金沙滩";
int count1= 0;//统计海底世界的数量
int count2= 0;//统计崂山的数量
String[] s = spots.split("、");//拆分字符串,返回值为字符串数组
//遍历统计
for (int i = 0; i < s.length; i++) {
if (s[i].equals("海底世界")){
count1++;
}
}
for (int i = 0; i < s.length; i++) {
if (s[i].equals("崂山")){
count2++;
}
}
System.out.println("去过海底世界的游客数量为:"+ count1);
System.out.println("去过崂山的游客数量为:"+ count2);
}
}
8、替换字符串
(1)语法:
- String replace(旧值,新值);
(2)注意事项:
- 只有返回值才是替换之后的结果;
//例:
String talk="我劝你赶紧回家打螺丝去,TMD,CNM";
String[] arr={"TMD","CNM","SB","WC"};
for(int i=0;i<arr.length;i++){
talk=talk.replace(arr[i],"***");
}
System.out.println(talk);
9、StringBuffer / StringBuilder类
(1)关系:
(2)双方解释:
①StringBuffer:
- 解决大量拼接字符串时产生很多中间对象问题而提供的一个类,(如:字符串连接)时,使用StringBuffer类可以大大提高程序执行效率;
- 是不定长,可改变,通过分配更大的内存实现,本质是一个线程安全的可修改的字符序列;
- 可将字符串缓冲区安全地用于多个线程;可以在必要时对这些方法进行同步;
②StringBuilder:
- 是 JDK 1.5 新增的类,它也代表可变字符串对象,与StringBuffer类本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销;
- 需要创建一个内容可变的字符串对象,则应该优先考虑使用 StringBuilder 类;
(3)双方比较:
①线程安全:
- StringBuffer:线程安全;
- StringBuilder:线程不安全;
②速度:
- 一般情况下,速度从快到慢为 StringBuilder > StringBuffer > String,当然这是相对的,不是绝对的;
③使用环境:
- 操作少量的数据使用 String;
- 单线程操作大量数据使用 StringBuilder;
- 多线程操作大量数据使用 StringBuffer;
(4)用法语法:
①转化为String类型:
- 字符串.toString( );
②追加、添加字符串:
- 字符串.append(字符串2);
③插入字符串:
- 字符串.insert(位置,参数);
④反转字符串:
- StringBuilder变量名.reverse();
//例:
//创建一个StringBuffer类的空对象
StringBuffer sb1 = new StringBuffer();
//创建一个带有内容的StringBuffer对象
StringBuffer sb2 = new StringBuffer("好记性不如烂键盘");
//例:
//从控制台输入3位游客对景点的评分,并按规定格式输出,以“#”分隔
double[] marks= new double [3];
double mark = 0.0;
Scanner input = new Scanner(System.in);
for (int i = 0; i < marks.length; i++) {
System.out.print("请输入景点的评分:");
mark = input.nextDouble();
marks[i]=mark;
}
//输出
StringBuffer sb = new StringBuffer("【");
for (int i = 0; i <marks.length ; i++) {
sb.append(marks[i]);
sb.append("#");
}
sb.append("】");
System.out.println(sb);
//例:
//从右边开始每4个数字用一个空格隔开,例如:手机号“13500000000”的显示结果为“135 0000 0000”
public static String phoneShow(String phone) {
StringBuffer sb = new StringBuffer(phone);
int pos = sb.length() - 1;
while (pos - 3 > 0) {
sb.insert(pos - 3, " ");
int index = sb.indexOf(" ");
pos = index - 1;
}
return sb.toString();
}
10、最新:StringJoiner概述
(1)补充说明:
- StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的;
- 在JDK8出现的;
(2)作用:
- 提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用;
(3)语法使用:
方法名 | 说明 |
public StringJoiner(间隔符号) | 创建一个StringJoiner对象,指定拼接时的间隔符号 |
public StringJoiner(间隔符号,开始符号,结束符号) | 创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号 |
public StringJoiner add(添加的内容) | 添加数据,并返回对象本身 |
public int length() | 返回长度(字符出现的个数) |
public String toString() | 返回一个字符串(该字符串就是拼接之后的结果) |