几天来,我一直在寻找解决问题的方法,但是在查看以前在互联网上回答的问题/博客/教程等时无法得到准确的答案。
我的目标是编写一个程序,它以十进制数作为输入,然后计算十六进制数并打印所述十六进制数的 unicode 符号 (\uXXXX)。我的问题是我无法将十六进制数字“转换”为 unicode。(必须写成这种格式:\uXXXX)
例子:
输入:
122(=十进制)
输出:
十六进制:7A
统一码:\u007A | Unicode 符号:拉丁文小写字母“z”
我唯一能做的就是打印 unicode (\u007A),但我想要符号 ("z")。我想如果 unicode 只有 4 个数字/字母,我只需要将十六进制“复制”到代码中,并用 0 填充剩余的位置,这有点工作,但正如我所说,我需要符号而不是代码。所以我试了又试,但我就是无法得到这个符号。据我了解,如果您想要该符号,则需要将其打印为字符串。但是当用字符串尝试它时,我得到错误“非法 unicode 转义”。
这就像您只能打印预先确定的 unicode,而不是与您的输入相关的现场生成的“随机”。
我才刚接触 Java 几天,如果我遗漏了任何东西,我深表歉意。
感谢您的阅读。
我的代码:
int dec;
int quotient;
int rest;
int[]hex = new int[10];
char[]chars = new char[]{
'F',
'E',
'D',
'C',
'B',
'A'
};
String unicode;
// Input Number
System.out.println("Input decimal number:");
Scanner input = new Scanner(System.in);
dec = input.nextInt();
//
// "Converting to hexadecimal
quotient = dec / 16;
rest = dec % 16;
hex[0] = rest;
int j = 1;
while (quotient != 0) {
rest = quotient % 16;
quotient = quotient / 16;
hex[j] = rest;
j++;
}
//
/*if (j == 1) {
unicode = '\u000';
}
if (j == 2) {
unicode = '\u00';
}
if (j == 3) {
unicode = '\u0';
}*/
System.out.println("Your number: " + dec);
System.out.print("The corresponding Hexadecimal number: ");
for (int i = j - 1; i >= 0; i--) {
if (hex[i] > 9) {
if (j == 1) {
unicode = "\u000" + String.valueOf(chars[16 - hex[i] - 1]);
}
if (j == 2) {
unicode = "\u00" + String.valueOf(chars[16 - hex[i] - 1]);
}
if (j == 3) {
unicode = "\u0" + String.valueOf(chars[16 - hex[i] - 1]);
}
System.out.print(chars[16 - hex[i] - 1]);
} else {
if (j == 1) {
unicode = "\u000" + Character.valueOf[hex[i]);
}
if (j == 2) {
unicode = "\u00" + Character.valueOf(hex[i]);
}
if (j == 3) {
unicode = "\u0" + Character.valueOf(hex[i]);
}
System.out.print(hex[i]);
}
}
System.out.println();
System.out.print("Unicode: " + (unicode));
}
它不是任何高级代码,我完全按照我在纸上计算的方式编写了它。将数字除以 16 直到我得到一个 0 并且这样做时剩下的是十六进制等价物。所以我把它放在一个while循环中,因为我会将数字除以n次直到我得到0,条件是重复除法直到商等于0。这样做时,每个部门的剩余部分将是我的十六进制数字的数字/字母,所以我需要保存它们。我选择一个整数数组来这样做。休息(剩余)=十六进制[j]。我还在名为“j”的变量中添加了一个变量,所以我现在要知道除法重复了多少次。所以我可以确定十六进制有多长。在示例中,它将 2 个字母/数字长 (7A),因此 j = 2。然后该变量将用于确定有多少个 0' s 我需要填写 unicode。如果我只有 2 个字母/数字,这意味着 \u 后面有 2 个空点,所以我们添加两个零,得到 \u007A 而不是 \u7A。
此外,下一个 if 命令将任何大于 9 的数字替换为上面 char 数组中的字符。基本上就像你在纸上做的那样。
对于这个冗长的问题,我感到非常抱歉。