String类
通过前面的学习,我们对String已经很熟悉了,String本质上是一个类,它不是基本数据类型
定义
分为new和直接创建,创建出来的字符串不可变(StringBuilder可变)
- new(字符串,字符数组,字节数组)
String str = new String("Hello World");
- 直接
String str = "Hello World"; //推荐写法
两种方法其实存在区别,请看下列代码:
String str1 = "Hello World";
String str2 = "Hello World";
此时str1和str2字符串内容相同,使用直接法,二者引用的是同一个对象,因此如果判断 == 的话返回true,如果是new则返回false(优化效率,JDK8后字符串内容存在“字符串常量池”中,创建 String 时会先看串池中有无相同的字符串)
再看一个:
String str1 = new String("Hello World");
String str2 = "Hello World";
其中str1存放的是堆中字符串的地址值,str2存放的是串池中字符串的地址值,二者并不相等
使用
charAt
遍历字符串用
compareTo
按照字典序比较两个字符串,小于返回负数,大于返回正数
contains
判断字符串中是否包含某个字符串,返回boolean型
equals
可以判断两个字符串是否内容相同
equalsIgnoreCase
判断是否相同,但是忽略大小写
isBlank(Java11)
判断是否为空串 / 只由空格组成
indexOf
查找字符串中某个字符对应下标(第一次出现) / 某个字符串第一个字符在字符串中对应下标
找不到返回-1
isEmpty
判空, "" 为空串
lastIndexOf
查找字符串中某个字符最后一次出现对应下标
length
求长度
repeat(Java11)
将字符串内容重复n次(n为形参)
replace
替换某个字符 / 字符串 为另一个字符 / 字符串
注:如果是字符串,那么所有对应的字符串都会被替换
String str = "Hello";
String rep = str.replace("He","Cia");
split
按照某个特定字符对String进行分割,并存入一个String数组中
String str = "Hello World";
String[] res = str.split(" ");
for(String s :res){
sout(s);
}
startsWith / endsWith
判断字符串是否以某个字符串开始 / 结尾
substring
裁剪,有两种方法
- 从下标为index处截到末尾
substring(index); - 从下标为index处截长度为len个
substring(index,len);
toLowerCase / toUpperCase
将某个字符串全部转换为小写 / 大写字母,注意不是在原字符串中改变,而是创建了一个新的字符串
trim(Java8)/ strip(Java11)
去除字符串的前面和后面所有多余的空格(中间的空格不会去除)
当然还有:
- stripLeading:只去除前面的空格
- stripTrailing:只去除后面的空格
其他
- String和字符数组可以相互转化
- String支持加法,可以拼接(如果加的是一个类的对象,那么就默认调用toString方法)
文本块(Java15)
类似于python的文本块,在Java15中新增了这个功能
当我们需要使用复杂字符串时,可能字符串中包含了很多需要转义的字符,比如双引号等,这时我们就可以使用三引号来囊括字符串
格式如下:
String str = """
"Hello World"
""";
文本块有以下特性:
- 可以在里面随意使用特殊字符,包括双引号和斜杠等,不用添加转义字符(当然这是一个语法糖,实际上编译器还是帮我们写了转义字符)