java字符文字错误中的字符太多
我正在创建一个时尚的文本应用程序,但在某些地方我遇到了一个错误(“字符文字中的字符太多”)。我只写了一个字母,但当我粘贴它时,它会转换成许多这样的字母:“\uD83C\uDD89”,而原来的字母是”🆉“
请告诉我如何用正确的方式写这个
for (int charOne = 0; charOne <= strBld.length() - 1; charOne++) {
char a = strBld.charAt(charOne);
char newCh = getSpecialCharEighth(a);
strBld.setCharAt(charOne, newCh);
}
private char getSpecialCharEighth(char a) {
char ch = a;
if (ch == 'Z' || ch == 'z') {
ch = '\uD83C\uDD89';
}
return ch;
}
# 1 楼答案
使用char数据类型无法做到这一点。用字符串代替
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
# 2 楼答案
Java
char
存储一个16位的值,即可以存储65536个不同的值。目前Unicode(12.1)中有137929个字符为了处理这个问题,Java字符串存储在UTF-16中,UTF-16是一种16位编码。大多数Unicode字符(称为代码点)存储在单个16位值中。有些存储在一对16位值中,称为代理项对
这意味着在Java中,Unicode字符可以存储为2
char
“字符”,这意味着如果希望代码具有完全的Unicode字符支持,就不能在单个char
值中存储Unicode字符它们可以存储在
int
变量中,在Java中,该值被称为代码点。然而,通常更容易将它们存储为String
在您的情况下,您似乎正在替换Unicode字符,因此正则表达式替换调用可能更好,例如
更新
如果要保留确定重置价值的方法,可以执行以下操作:
注意:
replaceAll(replacer)
是Java9+,Character.toString(codePoint)
是Java11+更新2
由于问题被标记为
android
,所以Java 9和Java 11 API不可用,所以这里是Java 7+解决方案结果为
s = "Hello World!"