!!! 注意
- 字符串的值在创建之后不能更改,任何对字符串对象的修改操作,实际上都是创建新的字符串对象
创建字符串
- 通过
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")------falseStringBuilder、StringBuffer
[!hint]
String与StringBuilder的区别
String做拼接的时候会在堆内存那里再创建一个地址,这样会增加缓存;但是StringBuilder不会增加缓存String创建的字符串的值不会改变,要改变只能创建新的字符串对象;StringBuilder可以在不改变地址值的情况下改变内容
[!hint]
StringBuffer与StringBuilder的区别
StringBuffer是线程安全的,适用于多线程环境下的字符串操作。它的方法都是同步的,保证了线程安全性,但也导致了一定的性能损失StringBuilder是非线程安全的,适用于单线程环境下的字符串操作。它的方法都没有同步机制,因此在单线程环境下比StringBuffer更高效
append
java
psvm {
StringBuilder s1 = new StringBuilder("green");
// 链式编程
s1.append("teck").append("666");
sout(s1);
}
---
greenteck666reverse
java
psvm {
StringBuilder s1 = new StringBuilder("green");
s1.append("teck");
s1.reverse();
sout(s1);
}
---
kcetneergString 与 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!