我遇到了以下内容:
public int indexOf(int ch)
当我修改一些与String相关的Java概念时,按照http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int)。
据我所知,当我们为indexOf()
使用方法java.lang.String
时,参数应该是char
,因此我假设它是
public int indexOf(char ch)
所以,请解释我为什么public int indexOf(int ch)
。
答案 0 :(得分:3)
Unicode包含超过2 ^ 16个字符。 Java'char'和'String'使用Unicode转换格式(UTF-16)来表示完整的字符集。基本多语言平面中的字符表示为单个16位“字符”。其余部分由代理项对表示:来自为此目的保留的集合中的两个特殊16位值。
另一种表示形式是UTF-32。在此表示中,每个字符都是一个32位项,句点。
例如,在SMP中存在楔形文字;块的第一个字符是U + 12000。在UTF-32中,这只是0x12000。在UTF-16中,它是"\uD808\uDC00"
。 Here's some pictures.
Character
和String
类(以及其他类)提供了一些操作UTF-32字符的方法,以方便使用。你在询问其中一个。每当您将'int'视为字符的数据类型时,这就是'int'包含的内容:UTF-32值。不难看出使用单个UTF-32值而不是一对代理进行某些操作会更方便。
请注意,这与合成和非合成重音无关。 á可以用Unicode表示为一个或两个UTF-16字符,但不涉及代理。 U + 0061(a),U + 00E1(具有预先组合的重音)和U + 0301(组成重音)的所有三个都是普通的BMP字符。因此,即使在UTF-32中,您也可以使用两项序列:U + 0061,U + 0301。
ICU4J库提供了一套更完整的UTF-32类和方法。
答案 1 :(得分:1)
每个char都有一个int值,您可以使用它来获取该char,并且可以通过将char赋值给int变量以相同的方式将图表转换为int 请尝试以下几行
char ch = 65;
System.out.println(ch);
int i = 'A';
System.out.println(i);
我在循环中使用char值,只是因为每个char都有一个int值。 尝试这个代码,它将打印出从A到Z的字母和它的等效int值
for(char j = 'A'; j <= 'Z'; j++){
System.out.println("int "+((int) j)+" = "+j);
}