4.Java字符串

4.Java字符串

Java字符串:被"..... " (双引号)包含的一个或多个字符。

'c'是字符 ,"c"是字符串

 

4.1String类

4.1.1声明字符串

String str; //未经初始化的字符串不可使用

 

4.1.2创建字符串

1.引用字符串常量

String str1="We are students"

2.利用字符数组或者字节数组创建

String s=new String(a);
//a是一个字符数组或者一个字节数组

3.提取字符数组的一部分创建一个字符串对象

String s=new String(a,2,4)
//方法原型是String(char a[],int offset, int length)

 

4.2连接字符串

使用'+'号可以连接多个字符串,返回一个String对象

'+'号也可以将字符串和其他类型连接,此时自动调用toString()方法

'+'号调用时,只要有一个操作数为字符串,就会将其他类型转换成字符串形式

 

5.2获取字符串信息

1.获取字符串长度

str.length()

2.字符串查找

 str.indexOf(substr)
//返回子串首次出现的索引位置
str.lastIndexOf(substr)
//返回子串最后一次出现的索引位置

3.获取指定索引位置的字符

str.chatAt(int index)

5.4字符串操作

1.获取字符子串

str.substring(int beginIndex)
//从某一索引出开始截取子串,直至字符串结尾
str.substring(int beginIndex,int endIndex)
//截取两个索引之间的字符串,子串中包含beginIndex对应字符,不包含endIndex对应字符

.2.去除空格

str.trim()
//返回字符串副本,去掉字符串前导空格和尾部空格

3.字符/字符串替换

str.replace(char oldChar,char newChar)
//用新的字符或者字符串替换掉旧的字符或者字符串

4.判断字符串开头和结尾

str.startsWith(String prefix)
//判断字符串开头是否是prefix
str.endsWith(String suffix)
//判断字符串结尾是否是suffix

5.判断字符串是否相等

str.equlas(String otherstr)
//当str和otherstr具有相同字符和长度时,返回true
str.equalsIgnoreCase(String otherstr)
//忽略大小写,比较str和otherstr是否具有相同字符和长度

6.按字典序比较字符串大小

str.compareTo(String otherstr)
//str>otherstr,返回负数;str==otherstr,返回0;str<otherstr,返回正数

7.字母大小写转换

str.toLowerCase()
str.toUpperCase()
//数字和非字符不受影响

8.字符串分割

str.split(String sign)
//按照sign对字符串拆分
str.split(String sign, int limit)
//对字符串拆分,限定次数为limit次
//注意返回值应该用String数组接收

 

5.5格式化字符串

静态方法String()用来创建格式化字符串,有两种重载形式

str.format(String format,Object...args)
str.format(Local 1,String format,Object...args)
//format为字符串,args是由格式说明符引用的参数;
//1为格式化过程要应用的语言环境,1为null时,则不进行本地化

1.常规类型格式化



 

2.日期类型格式化

 

3.时间类型格式化

时间类型格式化举例:

import java.util.Date;

......

Date date=new Date();

String s=String.format("%te",date);

 

 

 

5.6正则表达式

用于判断语句中,检查某一字符是否满足某一格式

元字符可以用一个括号括起若干个字符表示,表示该字符为括号中字符的任意一个

正则表达式中元字符:

正则表达式中限定符:

正则表达式中元字符含义举例:

代码举例1,判断某个字符串是否是合法邮箱:

 String regex="\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
   String a1="8534@qq.cn";
   String a2="cm@icloud.com";
   String  a3="@qq.com";
   System.out.println(a1.matches(regex));
   System.out.println(a2.matches(regex));
   System.out.println(a3.matches(regex));

a1、a2是合法字符,a3不是

代码举例2,判断某个字符串是不是合法中电话号码:

import java.util.Scanner;
​
.....
​
Scanner sc=new Scanner(System.in);
String regex="1(3[0-9]|5[012356789]|8[056789])\\w{8}";
    while(true) {
        String phone =sc.nextLine();
        System.out.println(phone.matches(regex));

5.7字符串生成器StringBuilder

可修改的字符序列,默认初始长度为16个字符,亦可自行指定长度

1.声明与初始化:

StringBuilder builder=new StringBuilder("");

2.尾部添加内容

append(content)
//content为任意类型

3.插入内容

insert(int offset,content)
//在索引offset处,插入任意类型的content

4.删除指定内容

delete(int start, int end)
//start、end位置字符会被保留

5.修改指定索引处的字符

public void setCharAt(int index,char ch)

6.字符串反序输出

public StringBuffer reverse() 

7.删除子字符串

public StringBuffer delete(int start,int end)
//删除字符start至end-1,end-1超出最大范围则一直删除到序列尾部;若start==end,不进行任何修改

8.替换指定位置内容

public StringBuffer replace(int start,int end ,String str)
//注意区别String的replace

 

 

9.与String类似的方法

length() 、 charAt()、indexOf()、substring()

 

5.8StringBuilder类

和StringBuffer类具有兼容的API,使用方法相同

不保证线程同步(不上锁),线程不安全,仅能在单线程中使用,但是效率更高

 

5.9StringBuffer、StringBuilder、String类的转换

1.转换为StringBuffer和StringBuilder类型,需要调用对应的构造函数,函数参数为Stiring类型

StringBuffer sbf=new StringBuffer(str);   
 //str为一个String类型
StringBuffer sbf=new StringBuffer(stf.toString()); 
//sbf为一个StringBuilder类型

#2.转换为String类型,直接用原来的StringBuffer和StringBuilder调用toString()函数即可,返回值是一个String类型

str=sb.toString(); 
//sbf为一个StringBuffer或StringBuilder类型

 

5.10StringBuffer、StringBuilder、String类的区别

1.创建String对象会在堆中产生一个匿名对象,指向栈中字符串的字面值;

每一次改变字符串都会在内存产生新的String对象

2.StringBuilder、StringBuffer类型的每一次操作都是在自己堆栈中操作,修改自己栈中值

3.三种类型中仅有StringBuffer是线程安全的

4.一般来说运行效率 StringBuilder>StringBuffer>String,修改较多,数据大的情况下不采用String

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值