Skip to content

!!! 注意

  • 字符串的值在创建之后不能更改,任何对字符串对象的修改操作,实际上都是创建新的字符串对象

创建字符串

  • 通过 char 数组创建【创建同一段字符串时,地址不同】
java
public static void main(String[] args) {
	char[] zifu = {97, 98, 99};
	String s1 = new String(zifu);
	String s2 = new String(zifu);
	System.out.println(s1 == s2);
}

---
false
  • 直接创建【创建同一段字符串时,地址相同】
java
public static void main(String[] args) {
	String s3 = "greenteck";
	String s4 = "greenteck";
	System.out.println(s3 == s4);
}

---
true

字符串的比较

[!hint] 在字符串中,== 比较的是地址的值,如果要比较字符串的内容,要使用 equals() 方法

java
String s1 = "hello";
String s2 = "hello";
sout(s1.equals(s2));

---
true

[!hint] 从字符串的比较可以看出,字符串是一个对象

遍历字符串

java
public static void main(String[] args) {
	String line="green";
	for(int i = 0; i < 5; i++){
		System.out.print(line.charAt(i));
		sout(" ");
	}
}

---
g r e e n

常用方法

  • String[] split("分离标号") 根据分离标号将 String 分离成 String[]
  • String replace(源字符,目标字符) 将字符串里的某些字符,替换为某些字符
  • Boolean isEmpty() 在字符串不为 null 时,判断字符串是否为空
  • Boolean isBlank() 在字符串不为 null 时,去除特殊字符,判断字符串是否未空
  • Boolean contains(字符A) 判断某个字符 A 在字符中是否存在
  • trim() 去掉首尾的空白字符
java
isEmpty(null)------true
isEmpty("")------true
isEmpty(" ")------false
isEmpty("aa")----false

isBlank(null)------true
isBlank("      ")------true
isBlank("\t \n \f \r")------true
isBlank("qqqq")------false

StringBuilder、StringBuffer

[!hint] StringStringBuilder 的区别

  • String 做拼接的时候会在堆内存那里再创建一个地址,这样会增加缓存;但是 StringBuilder 不会增加缓存
  • String 创建的字符串的值不会改变,要改变只能创建新的字符串对象;StringBuilder 可以在不改变地址值的情况下改变内容

[!hint] StringBufferStringBuilder 的区别

  • StringBuffer 是线程安全的,适用于多线程环境下的字符串操作。它的方法都是同步的,保证了线程安全性,但也导致了一定的性能损失
  • StringBuilder 是非线程安全的,适用于单线程环境下的字符串操作。它的方法都没有同步机制,因此在单线程环境下比 StringBuffer 更高效

append

java
psvm {
	StringBuilder s1 = new StringBuilder("green");
	// 链式编程
	s1.append("teck").append("666");
	sout(s1);
}

---
greenteck666

reverse

java
psvm {
	StringBuilder s1 = new StringBuilder("green");
	s1.append("teck");
	s1.reverse();
	sout(s1);
}

---
kcetneerg

String 与 StringBuilder 的转换

  • String -> StringBuilder使用 toString() 方法
java
psvm {
	StringBuilder s1 = new StringBuilder("green");
	String s2 = s1.toString();
	sout(s2);
}
  • StringBuilder -> String使用 StringBuilder的构造方法
java
psvm {
	String s1 = "green";
	StringBuilder s2 = new StringBuilder(s1);
	sout(s2);
}

StringJoiner

StringJoiner 用于便捷的连接字符串

构造函数

  • new StringJoiner(分隔字符)
  • new StringJoiner(分隔字符, 首字符, 尾字符);

非静态方法

  • add(字符串) 添加字符串
  • setEmptyValue(空时的值) 如果 StringJoiner 为 null,那 toString 时为什么值
java
StringJoiner productNameCn = new StringJoiner(",").setEmptyValue("aaa");
System.out.println(productNameCn);

productNameCn.add("Apple"); 
productNameCn.add("Banana"); 
productNameCn.add("Cherry");
System.out.println(productNameCn);

---
aaa
Apple,Banana,Cherry

文本块

文本块 就是可以使用 """……"""创建多行的字符串,比如 html 标签,或者 json 数据

java
String json = """
                {
                    "name": "nelson",
                    "age": 18,
                    "array": ["greenteck", "kite", "hoan"],
                }
                """;

System.out.println(json);

---
{
    "name": "nelson",
    "age": 18,
    "array": ["greenteck", "kite", "hoan"],
}

动态插值

java
String name = "world";
String greeting = """
                   Hello, ${name}!
                   """;
System.out.println(greeting);

---
Hello, world!