Java核心类-字符串和编码
2019-12-24 本文已影响0人
chrisghb
-
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[]
String
和char[]
类型可以互相转换,方法是:
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.请始终牢记:Java
的String
和char
在内存中总是以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转换