String类的常用API
方法名 | 方法说明 |
---|
length() | 获取字符串的长度 |
equals(String s) | 判断两个字符串内容是否相同 |
equalsIgnoreCase(String s) | 不区分大小写判断两个字符串内容是否相同 |
charAt(int index) | 返回下标所在的cha值(字符) |
indexOf(String s) | 返回字串第一次出现的位置,没出现则返回-1 |
lastIndexOf(String s) | 返回字串最后一次出现的位置,没出现返回-1 |
starstWith(String prefix) | 判断字符串是否以prefix为前缀开头 |
endsWith(String suffix) | 判断字符串是否以suffix为后缀结尾 |
toLowerCase() | 返回字符串的小写形式 |
toUpperCase() | 返回字符串的大写形式 |
substring(int startindex,int endindex) | 返回从startindex开始到endindex结束的字串 |
contains(String s) | 判断是否包含字串s |
concat(String s) | 字符串拼接,相当于+ |
replaceAll(String oldSrt,String newSrt) | 替换原有字符串中的字串为目标字串 |
split(String split) | 以指定字符串分割后返回字符串数组 |
getBytes() | 返回字符串的字节数组 |
tocharArray() | 将此字符串转换为一个新的字符数组 |
tirm() | 返回字符串两边消除空格后的字符串 |
isEmpty() | 判断字符串是否为空 |
compareTo | 将字符串与另一个对象进行比较 |
hashCode() | 返回字符串的哈希值 |
String、StringBuffer和StringBuilder
String | StringBuffer | StringBuilder |
---|
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 | StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 | 可变类,速度更快 |
不可变 | 可变 | 可变 |
| 线程安全 | 线程不安全 |
| 多线程操作字符串 | 单线程操作字符串 |
执行速度由快到慢:StringBuilder > StringBuffer > String
- StringBuffer和StringBuilder都继承AbstractStringBuilder抽象类
- 从AbstractStringBuilder抽象类中我们可以看到它们的底层都是可变的字符数组,所以在进行频繁的字符串操作时,建议使用StringBuffer和StringBuilder来进行操作。
- StringBuffer 对方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的