Java中与.charCodeAt()等效的方法是什么?

20
在JavaScript中,.charCodeAt()返回您传递给函数的字符串中某个位置的Unicode值。如果我只有一个字符,我可以使用以下代码获取Java中的Unicode值。
public int charCodeAt(char c) {
     int x;
     return x = (int) c;
}

如果我在Java中有一个字符串,如何获取字符串中单个字符的Unicode值,类似于JavaScript中的.charCodeAt()函数所做的那样?


1
请查看此链接:https://dev59.com/4nE95IYBdhLWcg3wp_gg - rai.skumar
9
哇,一个真正标记了 javajavascript 的问题! - jbabey
谁告诉你Unicode是24位的? - jlordo
2
第一个链接,我的错。在谷歌上快速搜索后,我学会了要对随机人给你的事实进行双重检查。 - syb0rg
4个回答

23

4
是的,它比较慢。但即使是由高低代理组成的4字节字符,它也可以正确地处理,而你的不能。你可以随时查看实现:http://docjar.com/html/api/java/lang/Character.java.html。 - jlordo
那么,@jlordo,你的函数对于加密来说会更好吗? - syb0rg
你必须定义“更好”。我只是说,它将为每个字符返回正确的代码点,而不仅仅是最多的。 - jlordo
@jlordo 是的,我刚刚阅读了有关它的API文档,还有你的评论帮了我... +1 - exexzian
1
可以,它可以处理每个字符。请阅读文档,我已经放了链接;)对于代理对,您必须指定高代理的索引。 - jlordo
显示剩余2条评论

0

有一种方法可以过滤掉你需要的特殊字符。只需查看ASCII

希望能帮到你

public class main {

public  static void main(String args[]) {
    String str = args[0];
    String bstr = "";
    String[] codePointAt = new String[str.length()];

    if (str != "") 
    {
        for (int j = 0; j < str.length(); j++) 
        {
            int charactercode=Character.codePointAt(str, j);
            //CHECK on ASCII TABLE THE SPECIAL CHARS YOU NEED
            if(     (charactercode>31 && charactercode<48) ||
                    (charactercode>57 && charactercode<65) ||
                    (charactercode>90 && charactercode<97) ||
                    (charactercode>127)

                )
            {
                codePointAt[ j] ="&"+String.valueOf(charactercode)+";";
            }
            else
            {
                codePointAt[ j] =  String.valueOf( str.charAt(j) );
            }
        }

        for (int j = 0; j < codePointAt.length; j++) 
        {
            System.out.println("CODE "+j+" ->"+ codePointAt[j]);
        }

    }   
 }

}

输出

call with ("TRY./&asda")

CODE 0 ->T
CODE 1 ->R
CODE 2 ->Y
CODE 3 ->&46;
CODE 4 ->&47;
CODE 5 ->&38;
CODE 6 ->a
CODE 7 ->s
CODE 8 ->d
CODE 9 ->a

将文本作为参数发送到主函数!!我忘记建议了!! - Alejandro Teixeira Muñoz

0

试试这个:

public int charCodeAt(String string, int index) {
    return (int) string.charAt(index);
}

1
这在大多数情况下是正确的,但对于由高代理项和低代理项表示的字符则不适用。 - jlordo

-2
short unicode = string.charAt(index);

@Android Killer 现在没问题了,但正如 @-jlordo 指出的那样 - 对于其他值大于 127 的字符怎么办? - exexzian
@jlordo 好的,谢谢你让我纠正,我已经改成了“short”。 - Android Killer
现在在大多数情况下都是正确的,但不适用于由一个高代理和一个低代理表示的字符。 - jlordo
1
为什么要将char赋值给short?Char和short都是16位类型,但char是无符号的,而short是有符号的。这意味着当将char强制转换为short时,您不会丢失任何信息,但您将得到负数而不是正数,这可能不是您所期望的。由于VM在内部使用int来表示short值,而int可以直接表示完整范围的无符号16位值,因此与将其转换为int相比,将char转换为short时没有任何好处。 - Jan B
@JanB移除了强制类型转换,不管怎样感谢您在这里分享知识。尽管我知道这个,但是我忘记了,谢谢你提醒我。 - Android Killer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接