字符串的类
-
String
-
StringBuffer
-
StringBuilder
字符串常量池 String pool
只存储字符串常量,双引号引起的存在字符串常量池,而且池中的内容不重复。
存放一个字符串:
1.从字符串常量池中查找是否存在该字符串空间
2.如果有,直接返回找到的字符串常量池中的对象,共享的
3.如果没有,在字符串常量池中创建这个对象
String str = "hello"; String str2 = "hello"; String str3 = "hello2"; if (str == str2){ System.out.println("str和str2"); } if (str == str3){ System.out.println("str和str3相等"); } if (str2 == str3){ System.out.println("str2和str3相等"); }
输出结果:
str和str2相等
字符串的常用方法
1.查找字符的方法
charAt(int index) //返回一个char类型索引处的值
codePointAt(int index) //返回索引处的字符的Unicode码
toCharArray() //把字符串变成char数组
2.字符串比较的方法(String类实现了Comparable接口 )
compareTo(String anotherString) //比较字符串中每个字符的Unicode码返回一个int类型,0相等,正数大于,负数小于
compareToIgnoreCase(String str) //功能同上,只是多了忽略大小写
equals(Object object) //判断两个字符串是否相等
tips:
"abc".equals(str)
如果不是两个字符串对象的话尽量这样写,可以防止空指针异常
3.字符串检索
contains(CharSequence s) //判断是否存在指定内容
startsWith(String prefix) //判断是否以指定的前缀开头
endsWith(String prefix) //判断是否以指定的后缀结尾
indexOf() //从左到右查找字符串所在位置,找到返回下标,没找到则返回-1,如果加第二个参数就是从指定索引处开始查找
lastIndexOf() //从右到左查找字符串所在位置,找到返回下标,没找到则返回-1,如果加第二个参数就是从指定索引处开始查找
4.字符串替换
replace(char oldChar, char newChar) //oldChar的每次出现都被newChar的出现替换
replace(CharSequence target, CharSequence replacement) //用指定的文字替换序列替换此字符串中与文字目标序列匹配的每个子字符串
replaceAll(String regex, String replacement) //用给定的替换替换此字符串中与给定正则表达式匹配的每个子字符串
5.字符串分隔
split(String regex) //围绕给定正则表达式的匹配拆分此字符串
split(String regex, int limit) //limit是控制分隔的次数,如果是负数限制会失效
6.字符串截取
substring(int beginIndex) //从指定索引处开始截取字符串
substring(int beginIndex, int endIndex) //从指定开始索引处到指定结尾处截取字符串,不包含结尾索引
String str = "abcdefg"; System.out.println(str.substring(2, 4));
输出结果为:cd
7.其他方法
int length() 返回字符串的长度(字符个数)
String toLowerCase() 变小写
String toUpperCase() 变大写
String trim() 去字符串前后空格,中间空格不去掉
字符串!= null 和 字符串.isEmpty() 一起使用能判断字符串是否是空内容,且能防止空指针异常
String类:
String是不可变的字符串
String str = "ab" + "c";
就这样一段简单的代码,String需要在堆中创建 "ab"、"c"、"abc" 3块空间,String不提供对字符串进行频繁修改操作的方法。
StringBuffer/StringBuilder类:
都是可变的字符串
区别:
1.StringBuffer:有synchronized关键字,线程安全,同步方法,效率低
2.StringBuilder:没有synchronized关键字,线程不安全,非同步方法,效率高
StringBuffer/StringBuilder的用法
追加:
.append();
插入:
.insert(int 小标, 内容);
删除:
.delete();删一个范围 //不包括结束位置
.deleteCharAt();删一个指定位置的字符
替换:
.replace(int 开始小标, int 结束小标, String 替换的内容) //不包括结束位置
反转:
.reverse();
修改指定位置的字符
.setCharAt(int 下标, char 字符);