String及其常用API
String是不可变对象
- String属于java.lang包,定义时使用了final修饰,对象不可改变,不可被继承
- 字符串的引用可以重新赋值
- 字符串地城封装了字符数组及针对字符数组的操作算法
- java字符串中任何一个字符(无论中文还是英文)对应16位(两个字节)的定长Unicode编码。
- 例子:
String常量池
- java为了提高性能,静态字符串(字面量、常量、常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串。
- 对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象。
例子:如果用debug工具会发现s1,s2,s3的地址都是一样的,说明他们指向的是同一个对象,而ss是变量连接,会新建一个字符串对象,跟前三个不同。使用new关键字也会新建一个对象。
String s1 = "abc";
String s2 = "abc";
String s3 = 'a'+"bc";//字面量连接
String ss1='a';
String ss2="bc";
String ss=ss1+ss2;//变量连接
String sss = new String("abc");//new关键字,新建对象
.length() 获取字符串长度
eg:str.length()
注意:这里后面有小括号,而获取数组长度时没有小括号。
.indexOf()检索字符串中某个字符或某段字符的下标。
有两种重载:
- int indexOf(String str),括号中可以是字符串或者字符,返回其第一次出现的下标,若不存在返回-1.
- int indexOf(String str,int fromIndex),从字符串的fromIndex位置开始检索
.lastIndexOf()
和indexOf类似,不过是查找最后一个出现的位置。
str.lastIndexOf(str,index),从下标index往前查找最后一个出现的位置
.substring()返回一个字符串的子字符串
String substring(int beginIndex, int endIndex)返回区间 [beginIndex,endIndex) 内的子字符串,注意包含开始,不包含结束下标。
可以不写结束下标,默认从beginIndex一直到结束。
还可以这样用:substring(x,x+n);截取从x开始的n个字符。
charAt(index)返回下标对应的字符
trim()去掉字符串前后的空格
若源字符串前后有空格,则返回它去掉空格后的副本,若没有则返回源字符串。常用语检查用户无意间输入的空格。
startsWith()/endsWith()检测字符串是否已制定字符串开头或结尾。
- 返回值是boolean类型
- 括号里可以是它本身,返回true
- 可以检测文件格式:str.endsWith(".mp4")
StringBuilder封装可变字符数组
对象创建后可以通过调用方法改变其封装的字符序列
StringBuilder的常用方法:
- StringBuilder append(String str) 追加字符串
- StringBuilder insert(int dstOffset ,String s) 插入字符串
- StringBuilder delete(int start, int end) 删除字符串
- StringBuilder replace(int start, int end, String str) 替换字符串
- StringBuilder reverse() 字符串翻转
注意:上面所有涉及到前后下标的都是前面包含,后面不包含