[英]How can I bring all the used ASCII characters of a file into a dictionary/array/list and assign each character a value?
[英]I used a char variable as Array Index to a Boolean array in Java? How does the conversion of character to its ASCII value happen?
下面的代码检查是否有重复的字符
String s = "Bengaluru";
boolean[] characters = new boolean[128];
for(int i=0; i<s.length();i++){
char ch = s.charAt(i);
if(characters[ch] == true){
return;
}
else
characters[ch] = true;//Here true is getting stored in the ASCII value of the character.
}
完整的答案比 dasblinkenlight 所暗示的要复杂得多。
从 Java 5 开始,数据类型char
不再表示字符或 Unicode 代码点,而是表示 UTF-16 编码的值,它可能是一个完整的字符或一个字符的一部分。 这个 UTF-16 值实际上只是一个 0 到 65535 范围内的 16 位无符号整数,并且在用作数组索引时会自动转换为 int,就像其他数字数据类型(如 short 或 byte)一样。 如果你真的想要一个 Unicode 代码点作为一个字符,你应该使用方法codePointAt(int index)
而不是charAt(int index)
。 Unicode 代码点可以在 0 到 1114111 (0x10ffff) 的范围内。
方法charAt
和codePointAt
方法在内部如何工作是特定于实现的。 通常错误地声称String
只是一个char
数组的包装器,但 String 类的内部实现不受语言或 API 规范的强制要求。 从 Java 6 开始,Oracle VM 一直使用不同的优化策略来节省内存,并不总是使用普通的char
数组。
Java 使用 16 位 UNICODE 代码点*表示char
。 没有发生到 ASCII 的转换 - 只是最初的 128 个代码点恰好表示与相应 ASCII 值相同的字符。
Java 确实执行了char
到int
的转换,以使索引成为可能。 这是一个隐式发生的内置转换,因为它正在扩大。 换句话说,任何可以存储在char
都可以用int
表示而不会丢失。
* Java-5 切换到 UTF-16 表示,将某些数字的解释更改为“部分字符”。 char
s 仍然是 16 位无符号数。
Java 支持自动扩展原语转换
https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2
char 到 int、long、float 或 double
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.