Java常用API之字符串
字符串
在java.lang
中提供:String类用于处理不可变的字符串,还提供了StringBuffer类、StringBuilder类 用于处理可变字符串。
它们都被声明为final类型,因此不能将其当做父类再被继承使用了。
String
String类用于创建字符串对象,其值在创建之后被当做常量,每次的修改其实都是产生并指向了新的字符串对象,原来的字符串对象都是没有改变的,所以称不可变字符串。
创建字符串有两种方法:
两者区别(面试常考):
- 以""方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份
- 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中
分类 | 方法 | 描述 |
构造器 | String(空/Str/char[]/byte[]) | 创建字符串对象 |
字符数组 | charAt(int index) | 返回索引处的字符 |
toCharArray() | 把字符串转换为字符数组 | |
内容比较 | equalsIgnoreCase(String anotherStr) | 忽略大小写比较字符串内容 |
equals(Object anObject) | 比较字符串内容,继承自Object,已经被重写 | |
compareTo() | 返回的是int,常用于字符串的字典序比较 | |
替换 | replace(target,newStr) | 使用newStr替换target字符串 |
replaceAll(String regex,String newStr) | 用newStr替换regex匹配的内容 | |
匹配 | split(String regex) | 按照传入的正则表达式切除字符串,返回剩余部分 |
startwith() | 匹配字符串是否以 指定串 作前缀 | |
endwith() | 匹配字符串是否以 指定串 作后缀 | |
matches(String regex) | 判断是否匹配正则表达式,匹配返回true,不匹配返回false | |
修改 | substring(int begin[,int end]) | 截取 [begin,end) 之间的字符串,不指定end则截取到末尾 |
trim() | 忽略前导、后导的空格 | |
编码 | getBytes(String charSetName) | 指定字符集,将该String编码为一系列字节存储到字节数组中 |
解码 | String(btye[],String charSetname) | 指定的字节数组构造新的String,若不指定则使用当前代码默认字符集 |
长度 | length() | 字符串长度 |
StringBuilder
StringBuilder是一个可变的字符串类,能提高字符串的操作效率。
在内部,StringBuilder对象被当作是一个包含字符序列的变长数组。
分类 | 方法 | 描述 |
构造 | StringBuilder() | 无参数传入,初始容量为 16个字符 |
StringBuilder(String str) | 有参数传入,初始容量为 16加上字符串参数的长度 | |
获取 | length() | 字符串长度 |
charAt(int index) | 返回指定索引的字符 | |
修改 | reverse() | 将对象内容反转 |
append(Object) | 添加数据并返回StringBuilder对象本身,支持所有类型元素的添加 | |
转化 | toString() | tringBuilder只是一个操作字符串的手段,最终还是要使用 toString() 恢复成String |
append(obj)可以接受任意类型的数据,其内部会调用String.valueOf(obj)转化为String后再拼接
支持链式编程
String 是不可变的类,是通过 StringBuilder 修改数据后再 toString() 返回,一次连接需要新建两个对象,所以String的操作非常浪费内存。
定义字符串使用String,拼接、修改等操作字符串使用StringBuilder。
StringBuffer
运行速度方面:StringBuilder > StringBuffer > String
线程安全方面:StringBuffer是线程安全的,StringBuilder是线程不安全的
StringBuffer类与StringBuilder类的原理和操作基本相同,区别就是StringBuffer是线程安全的,支持并发性操作,适合应用在多线程之中。
StringBuilder不支持并发性操作,线程是不安全的,但其在单线程中的性能要比StringBuffer高。