String类


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"
						 """;

文本块有以下特性:

  • 可以在里面随意使用特殊字符,包括双引号和斜杠等,不用添加转义字符(当然这是一个语法糖,实际上编译器还是帮我们写了转义字符)

Author: havenochoice
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source havenochoice !
评论
  TOC