2024-02-28 字符串和编码

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);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容