使用Java,此charAt()怎么样?把一个字符串变成一个整数?

时间:2019-05-28 21:15:30

标签: java unicode

我是Java的初学者,我试图向我自己理解和解释这个for循环是如何工作的。指令说,它通过使用循环为每个单词中的每个字母转换等效的数字Unicode。

基于我的理解,for循环使用.length()遍历整个单词,然后将其存储为int i,该整数被带入charAt的i括号中。 CharAt返回单词中的每个字符,然后int将其转换为存储为finalInt的int。

所以我的问题是unicode号是哪里来的?它怎么知道它是unicode?

String word1;
int finalInt; 

for (int i = 0; i < word1.length(); i++) {
    finalInt = (int) word1.charAt(i);

        }

3 个答案:

答案 0 :(得分:3)

Java字符基于Unicode

  

字符信息基于Unicode标准6.0.0版本。

https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html

此外,char和int可以相互转换。请参阅:Convert int to char in java

答案 1 :(得分:2)

检查ASCII表-http://www.asciitable.com/
您的代码将char(最后一列)转换为其数字表示形式(第一列)。

答案 2 :(得分:0)

使用Java,这个charAt()如何将字符串转换为整数?

Java String将字符串建模为char(不是int)值的数组。因此charAt只是索引(概念)数组。所以您会说字符串整数值...表示字符。

(在内部,不同版本的Java实际上使用了多种实现方法。在某些版本中,实际的表示形式不是char[]。但这全都隐藏在站点中...和您可以放心地忽略它。

所以我的问题是unicode号码是哪里来的?

它来自创建String的代码;即代码比称为new String(...)的代码要多。

  • 如果从String构造char[],则假定数组中的字符是有效的UTF-16表示形式的序列中的UTF-16代码单元。 / p>

  • 如果String是由byte[]构造的,则从某些指定的或隐含的编码中 decoded 字节序列。如果您提供将使用的编码(例如Charset)。否则,将使用应用程序的默认编码。无论哪种方式,解码器都负责产生有效的Unicode。

有时候这些东西坏了。例如,如果您的应用程序提供了以一种编码方式编码的byte[]并告诉String构造函数它是另一种编码,则您很可能在String中得到废话Unicode。通常称为mojibake

它怎么知道它是unicode?

String设计为基于Unicode。

需要知道的代码是由其他事物构成字符串的代码。 String类仅假定其内容有意义。 (从一个层面上讲,这无关紧要。您可以用格式错误的UTF-16或完全废话填充StringString会忠实地记录并复制废话。)


话虽如此,您的代码中有一个重要错误。

charAt方法不返回Unicode代码点。字符串主要建模为UTF-16代码单元的序列,charAt返回那些

Unicode代码点实际上是0 hex 到10FFFF hex 范围内的数字。不能将char ...限制为0 hex 到FFFF hex

UTF-16将Unicode代码点编码为16位代码单元。因此,charAt返回的值表示整个Unicode代码点(对于0 hex 到FFFF hex 范围内的代码点)或一个代码点(用于大于FFFF hex 的代码点)。

如果您想让String返回(完整的)Unicode代码点,则需要使用String.codePointAt。但是重要的是要仔细阅读javadocs以了解应如何使用该方法。 (使用String.codePoints()方法可能更简单。)

无论如何,这意味着您的代码在所有情况下均未为finalInt分配Unicode代码点。它适用于BMP(代码平面零)中的Unicode字符,但不适用于较高代码平面。例如,它将中断Emojis的Unicode代码点。