11-字符编码和字符串
原创2023年8月21日大约 6 分钟...约 1658 字
0. 目录
- 什么是字符集和编码
- 编码和字符集介绍
- ASCII 码和转义符(escape character)
- 字符串的“加法”
1. 什么是字符集和编码
1.1 什么是字符集(Charset)
- 字符集就是字符的集合。一般会包含一种语言的字符。比如:GBK,是包含所有常用汉字字符的字符集。ASCII 是包含英文字符的字符集。
- 字符就是 Java 中的 char,char 是 character 的简写。
1.2 什么是编码(Encoding)
- char 代表一个字符,char 的本质也是数字。将数字映射到字符,就叫编码。
- 将一个字符集映射到数字,就是给这个字符集编码。编码是有标准的,所有的计算机系统按照同一个编码标准执行。「我这边 65 代表 A,在全世界的计算机里面,65 都是代表 A。
- 有时候编码和字符集会混用。因为,计算机只认识数字。计算机要显示字符的话,就需要用数字来代表。也就是映射的数字,一般情况下都是混用的」
- 在所有编程语言里,所有的字符都是由数字表示的,数字是通过编码来映射到一个个字符的。
2. 编码和字符集介绍
2.1 常用的字符集简介
- ASCII 码,ASCII 表:https://baike.baidu.com/item/ASCII/309296#3
- Unicode 包含世界上所有常用字符,编码也有几种,包括 UTF-8(8-bit Unicode Transformation Format ),UTF-16 等。
- 「8 bit 不是只有 8 位,它是有标志的,它是可以扩展的。在 UTF-8 里面,它用几个字符都是不确定的。有可能有一个,有可能有三个。它怎么判断的呢,看它的第一位,类似我们的符号位一样。如果第一位是 1 的话,那它知道,后面那个 byte 还是属于我这字符的,那如果后面还是 1 的话,那也会认为是这个字符——这样也就会导致,它会把两个或者三个等其它的 byte 连接在一起。不用纠结,不需要细究!」
- Unicode,GBK 等所有常用的字符集,都会兼容 ASCII。举个例子,字符 A 在这些所有常用的字符集里,都是对应数字 65。
2.2 Java 中的字符集
- Java 中用的是 UTF-16 编码的 Unicode。
- UTF-16 用 16 个 bit,来表示字符,即两个 byte,这也是 char 占用两个 byte 的原因。当把 char 转成数字的时候,需要用 int——因为它(char)没有正负号。「1 byte = 8 bit,16 bit 也就是 2 byte ->>> char」
3. ASCII 码和转义符(escape character)
3.1 如何输出特殊字符「比如:有些字符键盘敲不出来」
- ASCII 码 +char,通过 ASCII 表可以找到需要的字符对应的数字。将这个数字转换为 char, 然后输出这个 char。 ASCII 表:https://baike.baidu.com/item/ASCII/309296#3
- 转义符。转义符用来给字符赋值,也可以用在字符串里面,作为字符串中的一个字符。
- PS:比如,我键盘上的 A 坏了,我怎么才能输出一个 A 呢,
3.2 转义符语法和常用的转义符
\n
,换行符\"
,双引号\t
,制表符\uXXXX
,unicode 编码对应的字符。
public class ComplexCharInString {
public static void main(String[] args) {
String content = "a\tb\tcc\tee\t";
String align = "1111222233334444";
System.out.println(content);
System.out.println(align);
}
}
输出:
a b cc ee
1111222233334444
从上面的结果可以知道,每一个的 \t
都是成立的。都是从数字的开始,一一对应的。
如果,这个时候要输出一个包含 “ 的内容,该怎么办呢?
demo1
public class ComplexCharInString {
public static void main(String[] args) {
String content = "a\tb\"\tcc\tee\t";
System.out.println(content);
}
}
demo2
public class ComplexCharInString {
public static void main(String[] args) {
String content = "a\tb\"\tcc\n\tee\t";
System.out.println(content);
}
}
我们来看看,\u
这种形式的:
public class ComplexChar {
public static void main(String[] args) {
int a = 65;
char cha = (char) a;
char zang = '\u81e7';
System.out.println(cha);
System.out.println(zang);
}
}
4. 字符串的“加法” 「所谓加法,其实是拼接」
任何的变量或者其它都可以和字符串拼接,相当于是把它加到字符串里面。
4.1 将变量穿插在字符串中输出
- 字符串可以和任何类型进行加法运算,则会将这个值的字符拼接到字符串上。
- 字符串也可以使用 += 操作符来拼接
- 字符串的加法运算符符合加法运算符本身的优先级
public class StingConcat {
public static void main(String[] args) {
int a = 10;
int b = 20;
int c = a + b;
System.out.println("a + b=" + c); // 把被加的 c 转成字符串
boolean aBiggerThanB = a > b;
System.out.println("a > b 是" + aBiggerThanB + "的");
System.out.println("a + b=" + a + b); // 考运算符优先级
System.out.println("a + b =" + (a + b));
System.out.println("a * b=" + a * b);
}
}
4.2 字符串不是 Java 中的基本数据类型
- 字符串类型的名字叫做 String
- 虽然 String 不是 Java 中的基础类型,但是也可以使用类似的语法
String str = “abc”;
来创建。开始的时候将其当成基础类型,更容易理解。 - String 不是 Java 中的保留字。 我创建一个
int String = 999;
是不会报错的;
4.3 String 的加法不会改变原 String 变量的值,改变其值要用赋值语句
public class StringVariable {
public static void main(String[] args) {
int a = 10;
String str = "a的值是";
str = str + a;
System.out.println(str);
String s2 = "a的值是";
System.out.println(str + a);
System.out.println(s2);
}
}
输出:
a的值是10
a的值是1010
a的值是
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】

AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
