Java核心类-字符串和编码

  • String
    Java中,String是一个引用类型,它本身也是一个class
    因为String太常用了,所以Java提供了" "这种字符串字面量表示方法。
    字符串在String内部是通过一个char[]数组表示的。
String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'});

Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的private final char[]字段。
字符串操作不改变原字符串内容,而是返回新字符串;

  • 字符串比较
    比较字符串的内容是否相同。必须使用equals()方法,而不能用==。要忽略大小写比较,使用equalsIgnoreCase()方法。
    1.原始数据类型, 他们之间的比较,应用双等号==,比较的是他们的值。
    2.引用类型,当他们用==进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false
  • 搜索子串
"Hello".contains("ll"); // true
"Hello".indexOf("l"); // 2
"Hello".lastIndexOf("l"); // 3
"Hello".startsWith("He"); // true
"Hello".endsWith("lo"); // true
  • 提取子串
"Hello".substring(2); // "llo"
"Hello".substring(0, 2); // "He"
"Hello".substring(2, 4); "ll"
注意索引号是从0开始的。
  • 类型转换
把任意基本类型或引用类型转换为字符串
String.valueOf(123); // "123"
String.valueOf(45.67); // "45.67"
String.valueOf(true); // "true"
String.valueOf(new Object()); // 类似java.lang.Object@636be97c
把字符串转换为其他类型
int n1 = Integer.parseInt("123"); // 123
int n2 = Integer.parseInt("ff", 16); // 按十六进制转换,255
把字符串转换为boolean类型
boolean b1 = Boolean.parseBoolean("true"); // true
boolean b2 = Boolean.parseBoolean("FALSE"); // false
  • 转换为char[]
    Stringchar[]类型可以互相转换,方法是:
char[] cs = "Hello".toCharArray(); // String -> char[]
String s = new String(cs); // char[] -> String
  • 字符编码
    1.早期的计算机系统中,使用美国国家标准学会制定了表示英文字母、数字和常用符号的ASCII编码,占用一个字节。
    2.后来汉字也纳入计算机编码,GB2312标准使用两个字节表示一个汉字,其中第一个字节的最高位始终为1,以便和ASCII编码区分开。
    3.为了统一全球所有语言的编码,全球统一码联盟发布了Unicode编码。
    4.我们经常使用的UTF-8又是什么编码呢?因为英文字符的Unicode编码高字节总是00,包含大量英文的文本会浪费空间,所以,出现了UTF-8编码,它是一种变长编码,用来把固定长度的Unicode编码变成1~4字节的变长编码。
    5.请始终牢记:JavaStringchar在内存中总是以Unicode编码表示。
把字符串转换成其他编码
byte[] b1 = "Hello".getBytes(); // 按ISO8859-1编码转换,不推荐
byte[] b2 = "Hello".getBytes("UTF-8"); // 按UTF-8编码转换
byte[] b2 = "Hello".getBytes("GBK"); // 按GBK编码转换
byte[] b3 = "Hello".getBytes(StandardCharsets.UTF_8); // 按UTF-8编码转换
把已知编码的byte[]转换为String
byte[] b = ...
String s1 = new String(b, "GBK"); // 按GBK转换
String s2 = new String(b, StandardCharsets.UTF_8); // 按UTF-8转换
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。