我在Java中使用了一个char变量作为布尔数组的数组索引?如何将字符转换为ASCII值?
下面的代码检查是否存在重复字符我在Java中使用了一个char变量作为布尔数组的数组索引?如何将字符转换为ASCII值?,java,ascii,Java,Ascii,下面的代码检查是否存在重复字符 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
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.
}
String s=“Bengaluru”;
布尔[]字符=新布尔[128];
对于(int i=0;iJava使用16位UNICODE码点*表示char
s。没有转换为ASCII码-只是最初的128个码点恰好表示与相应ASCII值相同的字符
Java确实执行了从char
到int
的转换,以使索引成为可能。这是一个隐式发生的内置转换,因为它正在扩大。换句话说,可以存储在char
中的任何值都可以在int
中表示,而不会丢失
*Java-5切换到UTF-16表示,将一些数字的解释更改为“部分字符”。char
s仍然是16位无符号数字。完整的答案比dasblinkenlight所建议的要复杂得多
自Java 5以来,数据类型char
不再表示字符或Unicode码点,而是一个UTF-16编码值,它可能是一个完整字符或字符的一小部分。这个UTF-16值实际上只是一个范围为0到65535的16位无符号整数,当用作整数时将自动转换为int数组索引,就像short或byte等其他数字数据类型一样。如果您确实希望Unicode码点作为字符,则应使用codepoint(int index)
方法,而不是charAt(int index)
。Unicode码点可以在0到1114111(0x10ffff)之间
方法charAt
和codePointAt
的内部工作方式是特定于实现的。通常错误地认为String
只是char
s数组的包装器,但是String类的内部实现不受语言或API规范的约束在ava 6中,Oracle VM一直在使用不同的优化策略来节省内存,并且并不总是使用普通的char
数组。Java支持自动扩展原语转换
字符到int、long、float或double没有转换,字符是数字。自从13年前Java 5发布以来,这一直是错误的。@jarnbjo我为此添加了一个脚注,谢谢。不过,它对答案的要点没有任何影响,因为OP的主要困惑在于char
s fo的适用性r索引数组。因此,基点是,当字符用作数组索引时,它会自动转换为int,这就是它间接表示字符ASCII值的方式。我的理解正确吗?@ChethanSwaroop是的,假设您将ASCII用作类似“Kleenex”。请停止。这样说更准确一般来说是“字符代码”,或者是“UTF-16代码单元”。并且,正如答案所解释的,char
并不总是完整的代码点或“字符”(例如,)