第十二章:字符串

目录

1、String对象存储字符串

2、获取字符串长度

3、比较字符串

4、字符串忽略大小写

5、连接字符串

6、提取字符串

7、拆分字符串

8、替换字符串

9、StringBuffer / StringBuilder类

10、最新:StringJoiner概述


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()

返回一个字符串(该字符串就是拼接之后的结果)

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值