前言:
🌈✨之前小怡给大家分享了图书管理系统这个项目,今天小怡给大家分享Java的String类。
1.String类的重要性
String是字符串类型,C语言中没有字符串类型。 Java当中没有说字符串的结尾是 \0这样的说法。C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提供的字符串系列函数完成大部分操作,但是这种将数据和操作数据分离开的方式不符合面向对象的思想,而字符串应用又非常广泛,Java语言专门提供了String类。
2.常用方法
2.1 字符串构造
String类提供的构造方式非常多,常用的就以下三种:
【注意】
1.String是引用类型,内部并不存储字符串本身;
2.在Java中,“”引起来的也是String类型对象。
2.2 String对象的比较
字符串的比较是常见操作之一,比如:字符串排序。Java中总共提供了四种方法:
1.==比较是否引用同一个对象
对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址。
2.boolean equals(Object anObject)方法:按照字典序比较
字典序:字符大小的顺序。
String类重写了父类的Object中equals方法,Object中equals默认按照==比较,String重写equals方法后,按照下面进行比较:
System.out.println("s1.equals(s2)");
3.int compareTo(String s)方法:按照字典序进行比较
与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。具体的比较方式:
(1)先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值;
(2)如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值。
System.out.println(s1.compareTo(s2));
4.int compareToIgnoreCase(String str)方法:与compareTo方式相同,但是忽略大小写比较
System.out.println(s1.compareToIgnoreCase(s2));
2.3 字符串查找
字符串查找也是字符串中非常常见的操作,String类提供的常用查找的方法:
方法 | 功能 |
---|---|
char charAt(int index) | 返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常 |
int indexOf(int ch) | 返回ch第一次出现的位置,没有返回-1 |
int indexOf(int ch,int fromIndex) | 从fromIndex位置开始找ch第一次出现的位置,没有返回-1 |
int index(String str) | 返回str第一次出现的位置,没有返回-1 |
int indexOf(String str,int fromInndex) | 从fromIndex位置开始找str第一次出现的位置,没有返回-1 |
int lastIndexOf(int ch) | 从后往前找,返回ch第一次出现的位置,没有返回-1 |
int lastIndexOf(int ch,int fromIndex) | 从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1 |
int lastIndexOf(Sting str) | 从后往前找,返回str第一次出现的位置,没有返回-1 |
int lastIndexOf(Sting str,int fromIndex) | 从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1 |
2.4 转化
只要涉及到String类型的转变,都不是在原有的字符串上进行修改。原理:会产生一个新的字符串。
1.数值和字符串转化
s4这一行代码是序列化,把对象变成了字符串。
2.大小写转换
3.字符串转数组
4.格式化
2.5 字符串替换
使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:
方法 | 功能 |
---|---|
String replaceAll(String regex,String replacement) | 替换所有的指定内容 |
String replaceFirst(String regex,String replacement) | 替换首个内容 |
注意事项:由于字符串是不可变对象,替换不修改当前字符串,而是产生一个新的字符串。
2.6 字符串拆分
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。
方法 | 功能 |
---|---|
String[] split(String regex) | 将字符串全部拆分 |
String[] split(String regex,int limit) | 将字符串以指定的格式,拆分成limit组 |
注意:拆分是特别常用的操作,一定要重点掌握。另外有些特殊字符作为分隔符可能无法正确划分,需要加上转义。
1.字符“|”,“*”,“+”都得加上转义字符,前面加上“\\”;
2.如果是“\”,那么就得写成“\\\\”;
3.如果一个字符串中有多个分隔符,可以用“|”作为连字符。
2.7 字符串截取
从一个完整的字符串中能截取出部分内容。
方法 | 功能 |
---|---|
String substring(int beginIndex) | 从指定索引截取到结尾 |
String substring(int beginIndex,int endIndex) | 截取部分内容 |
注意事项:
1.索引从0开始;
2.注意前闭后开区间的写法,substing(0,5)表示包含0号下标的字符,不包含5号下标。
2.8 其他操作方法
方法 | 功能 |
---|---|
Sting trim() | 去掉字符串中的左右空格,保留中间空格 |
String toUpperCase() | 字符串转大写 |
String toLowerCase() | 字符串转小写 |
代码示例:观察trim()方法的使用
String str=" hello world ";
System.out.println("["+str+"]");
System.out.println("["+str.trim()+"]");
trim会去掉字符串开头和结尾的空白字符(空格、换行、制表符等)。
2.9 字符串的不可变性
String是一种不可变对象。字符串的内容是不可改变。字符串不可被修改,是因为:
- String类在设计时就是不可改变的,String类实现描述中已经说明了;
- 所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象。
2.10 字符串修改
注意:尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低。
public static void main(String[] args){
String s="hello";
s+="world";
System.out.println(s);
}
可以看到在对String类进行修改时,效率是非常慢的,因此,尽量避免对String的直接修改,如果要修改建议尽量使用StringBuffer和StringBuilder。
3. StringBuffer和StringBuilder
3.1 StringBuilder介绍
由于String 的不可更改特性,为了方便字符串的修改,Java中又提供了 StringBuffer和StringBuilder类。这两个类大部分功能是相同的,这里介绍StringBuilder常用的一些方法。
方法 | 功能 |
---|---|
StringBuff append(String str) | 在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量 |
char charAt(int intdex) | 获取index位置的字符 |
int length() | 获取字符串的长度 |
int capacity() | 获取底层保存字符串空间总的大小 |
void ensureCapacity(int mininmumCapacity) | 扩容 |
void setCharAt(int index,char ch) | 将index位置的字符设置为ch |
int indexOf(String str) | 返回str第一次出现的位置 |
int index(String str,int fromIndex) | 从fromIndex位置开始查找str最后一次出现的位置 |
StringBuff insert(int offset,String str) | 在offset位置插入:八种基类类型&String类型&Object类型数据 |
StringBuffer deleteCharAt(int index) | 删除index位置字符 |
StringBuffer delete(int start,int end) | 删除[start,end)区间内的字符 |
StringBuffer replace(int start,int end,String str) | 将[start,end)区间内的字符替换为str |
String substring(int start) | 从start开始一直到末尾的字符以String的方式返回 |
String substring(int start,int end) | 将[start,end)范围内的字符以String的方式返回 |
StringBuffer reverse() | 反转字符串 |
String toString() | 将所有字符按照String的方式返回 |
String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改。频繁修改字符串的情况可以考虑使用StringBuilder。
注意: String、StringBuffer、StringBuilder的区别
- String的内容不可以修改,StringBuffer与StringBuilder的内容可以修改;
- StringBuffer与StringBuilder大部分功能是相似的;
- StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作。
🌈✨今天的分享到这里结束啦,小怡和大家一起进步一起学习,“记得三个尊:尊敬自已,尊重旁人,维持尊严,对自已的行动尽责”。