目录
一、String类
C语言中存在字符类型,但是在表示字符串的时只能使用字符数组或者字符指针,虽然可以使用标准库提供的字符串系列函数完成大部分的操作,这种将数据和操作数据方法分离开的方式却是不符合面向对象思想的。而字符串在实际工程的应用中又是不可或缺的,因此,Java语言专门提供了String类
二、常用方法
2.1字符串构造
String类提供的构造方法有很多,常见的是以下的三种:
public static void main(String[] args){
//使用常量串构造
String s1 = "Hello!";
//使用new关键字创建String对象
String s2 = new String("Hello!");
//使用字符数组进行构造
char[] array = {'h','e','l','l','o','!'};
String s3 = new String(array);
}
tips:
- String是引用类型,内部并不存储字符串本身
- 在Java中,""引起来的也是String类型对象
2.2String对象的比较
Java中提供了四种字符串的比较方法
- ==比较是否引用同一个对象(对于内置类型,==比较的是变量中的值;对于引用类型,==比较的是引用中的地址)
- boolean equals(Object anObject)方法:按照字典序(字符大小的顺序 )进行比较
- int compareTo(String s)方法:按照字典序进行比较(先按字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值;如果前k个字符相等(k为两个字符长度最小值),返回两个字符串长度差值)
- int compareToIgnoreCase(String str)方法:与compareTo比较方法相同,但是忽略大小写比较
2.3字符串查找
以下方法都是实例方法
方法 | 功能 |
char charAt(int index) | 返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常 |
int indexOf(int ch) | 返回ch第一次出现的位置,没有返回-1 |
int indexOf(int ch, int fromIndex) | 从fromIndex位置开始找ch第一次出现的位置,没有返回-1 |
int indexOf(String str) | 返回str第一次出现的位置,没有返回-1 |
int indexOf(String str, int fromIndex) | 从fromIndex位置开始找str第一次出现的位置,没有返回-1 |
int lastIndex(int ch) | 从后往前找,返回ch第一次出现的位置,没有返回-1 |
int lastIndex(int ch, int fromIndex) | 从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1 |
int lastIndexOf(String str) | 从后往前找,返回str第一次出现的位置,没有返回-1 |
int lastIndexOf(String str, int fromIndex) | 从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1 |
2.4转化
数值和字符串转化
- valueOf方法,将被操作值的类型改为调用改方法的类型
- 对象 -> 字符串 —— 序列化
- 字符串 -> 对象 —— 反序列化
大小写转换(只能转化字母)
- 小写 -> 大写 —— toUpperCase方法
- 大写 -> 小写 —— toLowerCase方法
字符串转数组:toCharArray方法
格式化:format方法("给定的格式",参数)
2.5字符串替换
使用一个指定的新的字符串替换掉已有的字符串数据,可以使用replace方法
- replace(char oldChar, char newChar)替换单个
- replace(CharSequence target, CharSequence replacement)替换多个
- replaceFirst(String regex, String replacement)替换第一个
- replaceAll(String regex, String replacement)替换所有的
2.6字符串拆分
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串
方法 | 功能 |
String[] split(String regex) | 将字符串全部拆分 |
String[] split(String regex, int limit) | 将字符串以指定的格式,拆分为limit组 |
有些特殊字符作为分隔符可能无法正确切分,需要加上转义
tips:
- 字符"|"、"*"、"+"都得加上转义字符,前面加上"\\"
- 如果是"\",那么就得写成"\\\\"
- 如果一个字符串中有多个分隔符,处理时用"|"进行分割(作为连字符)
2.7字符串截取
从一个完整的字符串之中截取部分内容,可以使用substring方法
substring方法,重载的两种截取方式
- String substring(int beginIndex)从指定索引截取到结尾
- String substring(int beginIndex, int endIndex)截取部分内容
去除字符串中的空格:trim方法(只会去除字符串两左右端的空格,字符串中的字符不会被改变)
三、字符串的不可变性
String是一种不可变对象,字符串中的内容是不可改变的,即字符串中不可修改
3.1不可变性的原理
String类中的字符实际保存在内部维护的value字符数组中
- String类被final修饰,表示该类不能被继承
- value被final修饰,表示value自身的值不能改变,即不能引用其他字符数组,但是其引用空间中的内容可以修改
所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变地是新对象
3.2字符串的修改
应尽量避免直接对String类型对象进行修改 ,因为String类是不能修改地,所有地修改都会创建新对象,效率非常低下
3.3StringBulider和StringBuffer
由于字符串的不可变性,Java中又提供了StingBuilder和StringBuffer两个类,用来更高效地进行字符串的修改
StingBuilder和StringBuffer类中的方法在当前对象中直接进行修改
StringBuffer一般用于多线程情况下,保证线程安全
StringBulider用于单线程情况下
Sting和StringBuilder相互转化,可以采取以下原则
- String变为StringBuilder:利用StringBulider的构造方法或append()方法
- StingBulider变为String:调用toString()方法