【问题标题】:Java - public int indexOf(int ch)Java - 公共 int indexOf(int ch)
【发布时间】:2014-11-22 17:01:27
【问题描述】:

我遇到了以下情况:

public int indexOf(int ch)

根据http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int),当我修改一些与字符串相关的 Java 概念时。

据我所知,当我们对java.lang.String 使用方法indexOf() 时,参数应该是char,因此我假设它是

public int indexOf(char ch)

那么,请解释一下为什么是public int indexOf(int ch)

【问题讨论】:

  • 是不是因为它把那个字符当作 Unicode 码点,而后者(Unicode 码点)又是一个 int 或数据类型为 int?
  • 我的猜测是,由于它处理的是 Unicode 码位,它只需要比char 提供的范围更广。 char 只有 8 位,而 int 是 32 位。
  • @Guildenstern char 是 16 位。这对于原始的 Unicode 来说已经足够了,但现在还不够。
  • 向上滚动到 String javadoc 的顶部,您将看到:“字符串表示 UTF-16 格式的字符串,其中补充字符由代理对表示(请参阅第Character 类中的 Unicode 字符表示以获取更多信息)。索引值指的是字符代码单元,因此补充字符使用字符串中的两个位置。"
  • @Vikram 在这里查看我的答案stackoverflow.com/a/26080888/1966247 希望它会清除您对字符和整数的概念:)

标签: java string char int indexof


【解决方案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);
    }

【讨论】:

    【解决方案2】:

    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(带预组合重音的a)和U+0301(组合重音)这三个都是普通的BMP字符。因此,即使在 UTF-32 中,您也可以有两个项目的序列:U+0061、U+0301。

    ICU4J 库提供了一套更完整的 UTF-32 类和方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多