2014-09-28 85 views
3

我碰到下面传来:爪哇 - 公众诠释的indexOf(INT CH)

public int indexOf(int ch) 

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int)当我正在修订相关的Java概念的一些字符串。

按我的知识,当我们使用方法indexOf()java.lang.String,参数应该是char,因此我假设它是

public int indexOf(char ch) 

所以,请给我解释一下为什么会public int indexOf(int ch)

+0

是因为它把这个字符作为Unicode代码点,这(Unicode代码点)又是一个int或有数据键入int? – Vikram 2014-09-28 01:12:40

+0

我的猜测是,自从它处理Unicode代码点以来,它只需要比'char'提供的范围更广的范围。 “char”只有8位,而“int”是32位。 – Guildenstern 2014-09-28 01:13:07

+1

@Guildenstern'char'是16位。原来的Unicode已经足够了,但没有了。 – ajb 2014-09-28 01:18:40

回答

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.

CharacterString类(其中包括)提供了一些方法,它们为了方便起见可以使用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

每一个字符都可以通过int变量 指定一个字符用它来获得该字符也可以将图表转换成INT以同样的方式尝试以下线的一个int值

char ch = 65; 
System.out.println(ch); 
int i = 'A'; 
System.out.println(i); 

我在一个循环中使用char值,它只是因为每个char都有一个int值而被允许。 试试这个代码,它将从一个打印出字母到Z和它的等效int类型

for(char j = 'A'; j <= 'Z'; j++){ 
     System.out.println("int "+((int) j)+" = "+j); 
    }