转换unicode字符串" \ u0063"进入" c"

时间:2014-10-17 01:20:14

标签: java string unicode

我正在做一些加密分析作业,并试图编写一个+ b = c的代码。我的想法是使用unicode。 b +(b-a)= c。问题是我的代码返回的是unicode值c而不是String" c"我无法转换它。

有人可以解释下面名为unicode的字符串和名为test和test2的字符串之间的区别吗?还有什么方法可以让字符串unicodeOfC打印" c"?

//this calculates the unicode value for c
String unicodeOfC = ("\\u" + Integer.toHexString('b'+('b'-'a') | 0x10000).substring(1));

//this prints \u0063
System.out.println(unicodeOfC);

String test = "\u0063";

//this prints c
System.out.println(test);

//this is false
System.out.println(test.equals(unicodeOfC));

String test2 = "\u0063";
//this is true
System.out.println(test.equals(test2));

2 个答案:

答案 0 :(得分:1)

testtest2之间没有区别。它们都是String literals引用相同的String。此String字面值由unicode escape组成。

  

首先是Java编程语言(“Java编译器”)的编译器   识别输入中的Unicode转义,转换ASCII   字符\u后跟UTF-16代码的四个十六进制数字   单位(§3.1)表示指定的十六进制值,并传递所有其他值   字符不变。

因此编译器将转换此unicode转义并将其转换为相应的UTF-16代码单元。也就是说,unicode转义\u0063转换为字符c

在此

String unicodeOfC = ("\\u" + Integer.toHexString('b'+('b'-'a') | 0x10000).substring(1));

String文字"\\u"(使用\字符转义\字符)的运行时值为\u,即。两个字符\uString与调用toHexString(..)的结果连接在一起。然后,您在生成的substring上调用String,并将其结果分配给unicodeOfC。因此String值为\u0063,即。 6个字符\u0063

  

还有什么方法可以让字符串unicodeOfC打印“c”吗?

与您创建它的方式类似,您需要获取unicode转义的数字部分,

String numerical = unicodeOfC.replace("\\u", "");
int val = Integer.parseInt(numerical, 16);
System.out.println((char) val);

然后您可以将其打印出来。

答案 1 :(得分:0)

我认为您并不了解字符串转义的工作原理。

在Java中,反斜杠是一个转义字符,允许您在字符串中使用字符,如换行符\n,制表符\t或unicode \u0063

假设我正在编写代码,我需要打印换行符。我会这样做System.out.println("\n");

现在假设我要显示反斜杠,System.out.println("\");将是编译错误,但System.out.println("\\");将打印\

所以你的第一个字符串是打印字面反斜杠字符,然后是字母u,然后是十六进制数字。