String 是一个引用类型
实际上,字符串在String内部是通过一个char[]数组表示的,因此 String s2 = new String(new char[]{'H','e','l','l','o','!'});
Java 提供了 “...”这种字符串字面量表示方法。
Java字符串的一个重要特点就是字符串“不可变”
Java编译器在编译期,会自动把所有相同的字符串当作一个对象放入常量池。
两个字符串比较,必须总是使用equals()方法。
忽略大小写的比较,使用equalsIgnoreCase()方法。
是否包含子串,使用contains()方法。
"Hello".contains("ll"); //true
搜索子串的更多例子,indexOf()、lastIndexOf()、startsWith()、endsWith():
"Hello".indexOf("l"); //2 字符串出现的索引位置
"Hello".lastIndexOf("l"); //3 字符串出现的最后索引位置
"Hello".startsWith("He"); //true 是否以。。。字符串开始
"Hello".endsWith("lo"); //true 是否以。。。字符串结尾
提取子串的例子:
"Hello".substring(2); // llo
"Hello".substring(2,4); // ll
去除首位空白字符:包括空格、\t、\r、\n
" \tHello\r\n ".trim() // Hello
strip()方法也可以移除字符串首尾空白字符。它和trim()不同的是,类似中文的空格字符\u3000也会被移除。
"\u3000Hello\u3000".strip(); // Hello
" Hello ".stripLeading(); //移除前面的空白字符 "Hello "
" Hello ".stripTrailing(); //移除后面的空白字符 " Hello"
isEmpty(),判断字符串是否为空
"".isEmpty(); //true,因为字符串长度为0
" ".isEmpty(); //false,因为字符串长度不为0
isBlank(),判断字符串是否为空白字符串
" \n".isBlank(); //true, 因为只包含空白字符
" Hello ".isBlank(); //false,因为包含非空白字符
请问isEmpty()和isBlank()方法的区别是什么?
replace() 、replaceAll() 替换子串
String s = "hello";
s.replace('l','w'); // "hewwo" 所有字符`l`被替换为`w`
s.replace("ll","~~"); "he~~o" 所有子串 "ll"被替换为"~~"
通过正则表达式替换:
String s = "A,,B;C ,D";
s.relaceAll("[\\,\\;\\s]+",","); //"A,B,C,D" 把匹配的子串统一替换为","
split()分割字符串
String s = "A,B,C,D";
String[] ss = s.split("\\,"); //{"A","B","C","D"}
join()拼接字符串
String[] arr = {"A","B","C","D"};
String s = String.join("***",arr); // "A***B***C***D"
formatted()方法、format()静态方法, 格式化字符串,可以传入其他参数,替换占位符,然后生成新的字符串
String s = "Hi %s, your score is %d!";
System.out.println(s.formatted("Alice",80));
System.out.println(String.format("Hi %s, your scroe is %.2f!", "Bob", 59.5));
有几个占位符,后面就传入几个参数。参数类型要和占位符一致。
常用的占位符有:
-
%s:显示字符串。 -
%d:显示整数 -
%x:显示十六进制整数 -
%f:显示浮点数
占位符还可以带格式,例如%.2f表示显示两位小数。
如果不确定用啥占位符,那就始终用%s,因为%s可以显示任何数据类型。
类型转换
要把任意基本类型或引用类型转换为字符串,可以使用静态方法valueOf()。这是一个重载方法,编译器会根据参数自动选择合适的方法。
String.valueOf(123); // "123"
String.valueOf(454.67) // "45.67"
String.valueOf(true); // "true"
String.valueOf(new Object()); //类似java.lang.Object@636be97c
把字符串转换为int类型:
int n1 = Integer.parseInt("123"); // 123
int n2 = Integer.parseInt("ff", 16); //按十六进制转换 , 255
把字符串转换为boolean类型:
boolean b1 = Bollean.parseBoolean("true"); // true
boolean b2 = Bollean.parseBoolean("FALSE"); // false
要特别注意,Integer有个getInteger(String)方法,它不是将字符串转换为int,而是把该字符串对应的系统变量转换为Integer
Integer.getInteger("java.version"); //版本号,11
转换为char[]
String 和 char[] 类型可以互相转换
char[] cs = "Hello".toCharArray(); // String -> char
String s = new String(cs); // char[] -> String
如果修改了char[]数组,String并不会改变
public class Main {
public static void main(String[] args) {
char[] cs = "Hello".toCharArray();
String s = new String(cs);
System.out.println(s);
cs[0] = 'X';
System.out.println(s);
}
}
