Unicode 码点
Unicode 码点(Unicode code point)是 Unicode 字符集中的一个唯一标识符,用于表示一个字符。每个字符在 Unicode 标准中都有一个唯一的整数值,这个值被称为 Unicode 码点。
Unicode 码点是用一个整数来表示的,通常写作 U+
后跟一个十六进制的数值。
Unicode 码点的结构
Unicode 码点的值范围从 U+0000
到 U+10FFFF
,共计 1,114,112 个可能的码点。
Unicode 码点的分类:
-
基本多文种平面(BMP,Basic Multilingual Plane):
- 这是 Unicode 标准的第一个平面,包含了常用的字符(如拉丁字母、汉字、标点符号等),其码点范围是从
U+0000
到U+FFFF
(即 0 到 65,535)。 - 例如,
U+0041
对应字符'A'
,U+4E2D
对应汉字'中'
。
- 这是 Unicode 标准的第一个平面,包含了常用的字符(如拉丁字母、汉字、标点符号等),其码点范围是从
-
辅助平面(Supplementary Planes):
- 除了 BMP 外,Unicode 还定义了其他的平面(补充平面),其码点范围是从
U+010000
到U+10FFFF
。这些平面主要用于包括表情符号、历史文字、数学符号等。 - 例如,
U+1F600
对应表情符号 😀,属于辅助平面。
- 除了 BMP 外,Unicode 还定义了其他的平面(补充平面),其码点范围是从
码点和字符的关系
Unicode 码点与字符的关系是:每个 Unicode 码点表示一个字符。然而,一个字符在内存中的存储方式与码点的表示方式有区别,特别是在处理多字节字符(如辅助平面的字符)时。
- 基本字符:对于 BMP 中的字符(即
U+0000
到U+FFFF
范围的字符),通常一个 Unicode 码点可以直接映射到一个字符。 - 代理对字符:对于辅助平面中的字符(例如表情符号),一个字符可能由 两个 16 位的字符单元(称为代理对)表示。这是因为 Java 中的
char
类型是 16 位的,而某些字符(如表情符号)需要超过 16 位的存储空间。
Unicode 码点与编码
- UTF-8:一种变长编码方式,通常用于存储和传输 Unicode 字符。对于 BMP 范围的字符(
U+0000
到U+FFFF
),UTF-8 使用 1 到 3 个字节表示。而对于辅助平面字符,UTF-8 使用 4 个字节。 - UTF-16:一种固定或变长编码方式,广泛用于内存中的字符表示。Java 使用 UTF-16 来表示字符。对于 BMP 中的字符,UTF-16 使用 2 个字节表示;对于辅助平面字符,UTF-16 使用两个
char
(16 位)单位表示(称为代理对)。 - UTF-32:使用 4 个字节表示一个 Unicode 码点。
总结:
- Unicode 码点 是一个用于表示字符的唯一标识符。每个 Unicode 字符都有一个唯一的码点,通常表示为
U+
后跟一个十六进制数。 - 它使得不同语言和符号可以在全球范围内标准化,方便跨平台的字符处理。
- Unicode 码点通过编码格式(如 UTF-8、UTF-16、UTF-32)存储和传输,在 Java 中可以通过
int[]
数组处理这些码点。
String 类的方法
索引从 0
开始
如果 索引 小于 0 或大于等于字符串的长度,方法会抛出 StringIndexOutOfBoundsException
异常
空字符串 (""
) 是一个特殊的字符串,它被认为是存在于所有字符串的任意位置,包括开头、结尾、以及每个字符之间的位置。
ch
:要查找的字符。它是一个整数,表示字符的 Unicode 值。
返回类型 | 方法 | 说明 |
---|---|---|
char | charAt(int index) | 返回指定索引位置的字符 |
int | indexOf(int ch) | 返回指定字符ch在字符串中第一次出现的位置(索引),如果字符不存在于字符串中,返回 -1 |
int | indexOf(int ch, int fromIndex) | 返回字符 ch 在字符串中从指定的索引位置fromIndex 开始第一次出现的位置(索引),如果字符不存在于字符串中或fromIndex 大于等于字符串的长度,返回 -1 |
int | indexOf(String str) | 该方法返回子字符串在字符串中首次出现的索引,如果没有找到子字符串,返回 -1 |
int | indexOf(String str, int fromIndex) | 返回子字符串 str 在字符串中从指定的索引位置fromIndex 开始第一次出现的位置(索引),如果子字符串不存在于字符串中或fromIndex 大于等于字符串的长度,返回 -1。 |
int | lastIndexOf(int ch) | 从后往前找,返回字符 ch 在字符串中第一次出现的位置,如果字符不存在于字符串中,返回 -1 |
int | lastIndexOf(int ch, int fromIndex) | 从后往前找,返回字符 ch 在字符串中从指定的索引位置fromIndex 开始第一次出现的位置(索引),如果字符不存在于字符串中,返回 -1。如果 或fromIndex 大于等于字符串的长度,方法会将 fromIndex 限制为字符串的最后一个有效索引位置( str.length() - 1 )。即查找会从字符串的最后一个字符开始从后往前找。 |
int | lastIndexOf(String str) | 从后往前找,返回子字符串 str 在字符串中从指定的索引位置fromIndex 开始第一次出现的位置(索引),如果子字符串不存在于字符串中或fromIndex 大于等于字符串的长度,返回 -1。 |
int | lastIndexOf(String str, int fromIndex) | 从后往前找,返回子字符串 str 在字符串中从指定的索引位置fromIndex 开始第一次出现的位置(索引),如果子字符串不存在于字符串中,返回 -1。如果 fromIndex 大于等于字符串的长度,方法会将 fromIndex 限制为字符串的最后一个有效索引位置( str.length() - 1 )。即查找会从字符串的最后一个字符开始从后往前找。 |
int | codePointAt(int index) | 返回指定索引位置的字符的Unicode 代码点 |
int | codePointBefore(int index) | 返回指定索引位置的前一个字符的Unicode 代码点 |
int | codePointCount(int beginIndex, int endIndex) | 计算字符串中指定范围 [beginIndex , endIndex)(前闭后开) 内的 Unicode 码点数 |
int | compareTo(String anotherString) | 按字典顺序比较两个字符串。 |
int | compareToIgnoreCase(String str) | 按字典顺序比较两个字符串,忽略大小写差异 |
String | concat(String str) | 将指定字符串连接到该字符的末尾 |
boolean | contains(CharSequence s) | 判断当前字符串是否包含指定的子字符串 |
boolean | contentEquals(CharSequence cs) | 比较当前字符串与指定的 CharSequence 对象的内容是否相同,不同于 equals() 方法,contentEquals() 用于比较字符串的字符内容,而不关心它们是否是同一类型的对象 |
boolean | equals(Object anObject) | 默认情况下,equals() 方法比较的是对象的引用地址,但是, String类 重写 equals() 方法,使其基于对象的内容来进行比较 |
boolean | contentEquals(StringBuffer sb) | 检查 String 和 StringBuffer 中的字符序列是否完全一致 |
boolean | endsWith(String suffix) | 检查字符串是否以指定的后缀(suffix )结尾,如果传入的 suffix 是空字符串 "" ,则返回 true |
boolean | equalsIgnoreCase(String anotherString) | 用于比较当前字符串与指定字符串 anotherString 是否相等,忽略大小写差异。 |
byte[] | getBytes() | 将字符串转换为字节数组 |
byte[] | getBytes(Charset charset) | 将字符串转换为字节数组,使用指定的字符集(Charset ) 进行编码 |
byte[] | getBytes(String charsetName) | 将字符串转换为字节数组,并使用指定的字符集进行编码 |
void | getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) | 将该字符串中指定范围 [srcBegin ,srcEnd)(前闭后开)内的字符复制到从 dstBegin 位置开始的 dst 字符数组中, |
int | hashCode() | 根据字符串的内容计算哈希码,重写了 Object 类中的 hashCode() 方法 |
String | intern() | 将字符串对象加入到字符串常量池(string pool)中,返回该字符串的引用 |
boolean | isEmpty() | 判断字符串是否为空,为空 "" ,则返回true,否则返回false |
int | length() | 用于获取字符串的长度(字符个数,包括空格和特殊字符)。 空字符串 |
boolean | matches(String regex) | 判断当前字符串是否完全匹配指定的正则表达式regex。 |
int | offsetByCodePoints(int index, int codePointOffset) | 字符串从 index 位置起偏移codePointOffset 个 Unicode 编码点,返回字符串中偏移后的字符位置。codePointOffset 可以是正数也可以是负数。适用于处理包含多字节字符(如表情符号、非 ASCII 字符等)的字符串,可以避免由于字符占用不同字节数而导致的索引错误 |
boolean | regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) | 比较两个字符串中指定位置的子字符串(区域)是否相等。
|
boolean | regionMatches(int toffset, String other, int ooffset, int len) | 比较两个字符串中指定位置的子字符串(区域)是否相等。 |
String | replace(char oldChar, char newChar) | 将字符串中所有的 oldChar 字符替换为 newChar字符 ,并返回一个新的被替换后的字符串 |
String | replace(CharSequence target, CharSequence replacement) | 将字符串中所有与 target 相等的子字符串替换为 replacement ,并返回一个新的被替换后的字符串 |
String | replaceAll(String regex, String replacement) | 将字符串中所有与正则表达式 regex 匹配的子字符串替换为 replacement ,并返回一个新的被替换后的字符串。 |
String | replaceFirst(String regex, String replacement) | 用于替换第一个与正则表达式 regex 匹配的子字符串,其他匹配的部分保持不变,并返回一个新的被替换后的字符串。 |
String[] | split(String regex) | 根据给定的正则表达式regex(表示分隔符)将字符串分割成多个子字符串,并返回一个字符串数组 |
String[] | split(String regex, int limit) | 根据给定的正则表达式regex(表示分隔符)将字符串分割成多个子字符串,并返回一个字符串数组。limit 限制返回的数组的大小(即最多分割的次数)。
|
boolean | startsWith(String prefix) | 用于检查字符串是否以指定的前缀字符串 prefix 开始 |
boolean | startsWith(String prefix, int toffset) | 用于检查从字符串的指定索引位置 toffet 开始,是否以指定的前缀字符串 prefix 开始 |
String | substring(int beginIndex) | 用于提取字符串的子字符串。它从指定的位置 beginIndex 开始,一直到字符串的末尾,返回一个新的字符串。 |
String | substring(int beginIndex, int endIndex) | 用于从一个字符串中提取指定范围 [ beginIndex , endIndex )(前闭后开) 的子字符串,返回一个新的字符串。 |
CharSequence | subSequence(int beginIndex, int endIndex) | 用于从一个字符序列中提取指定范围 [ beginIndex , endIndex )(前闭后开) 的子序列,返回一个新的 CharSequence字符序列 |
char[] | toCharArray() | 将一个字符串转换为一个字符数组(char[] ) |
String | toLowerCase() | 将字符串中的所有大写字母转换为小写字母 |
String | toLowerCase(Locale locale) | 跟据指定的区域设置(Locale )将字符串中的所有大写字母转换为小写字母 |
String | toUpperCase() | 将字符串中的所有小写字母转换为大写字母 |
String | toUpperCase(Locale locale) | 跟据指定的区域设置(Locale )将字符串中的所有小写字母转换为大写字母 |
String | trim() | 用于去除字符串开头和结尾处所有的空白字符(包括空格、制表符 \t 、换行符 \n、回车符 \r 等),中间的空白字符保持不变。返回一个新的字符串。 |
String | toString() | 返回字符串对象本身的内容,重写了Object 类中的toString方法 |
静态方法
静态方法可以通过类名来调用,不需要创建一个新的String对象
修饰限定符和返回类型 :public static String
静态方法 | 说明 |
copyValueOf(char[] data) | 用于将字符数组 data 转换为一个新的字符串 |
copyValueOf(char[] data, int offset, int count) | 在指定的字符数组 data 中,从 offset 开始,读取 count个字符,并将这些字符转换为一个新的字符串 |
format(Locale l, String format, Object... args) | 根据指定的 区域设置(Locale) 格式化字符串,format 格式化字符串,定义输出的格式,args 需要格式化的数据对象 |
format(String format, Object... args) | 根据指定的格式化字符串对数据进行格式化 |
join(CharSequence delimiter, CharSequence... elements) | 将多个 CharSequence 元素连接成一个单一的字符串,并通过指定的分隔符delimiter 分隔每个元素。elements :一个可变参数,表示要连接的多个 CharSequence 元素 |
join(CharSequence delimiter, Iterable<? extends CharSequence> elements) | 将一个实现了 Iterable 接口的集合中的元素连接成一个字符串,并通过指定的分隔符delimiter 分隔每个元素。elements :一个 Iterable<? extends CharSequence> 类型的集合,表示要连接的多个 CharSequence 元素。Iterable 是一个接口,常见的实现类包括 List 、Set 等。 |
valueOf(boolean b) | 将一个 boolean 值转换为对应的字符串表示形式 |
valueOf(char c) | 将一个 char (字符)转换为字符串 |
valueOf(char[] data) | 将一个字符数组(char[] )转换为一个新的字符串 |
valueOf(char[] data, int offset, int count) | 将字符数组 data 中从指定位置 offset 开始的连续 count 个字符转换为一个新的字符串 |
valueOf(double/float d) | 将一个
|
valueOf(int/long i) | 将一个 int/long 类型的数值转换为对应的字符串。 |
valueOf(Object obj) | 将一个对象转换为字符串
|