我正在做一些加密分析作业,并试图编写一个+ 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));
答案 0 :(得分:1)
test
和test2
之间没有区别。它们都是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
,即。两个字符\
和u
。 String
与调用toHexString(..)
的结果连接在一起。然后,您在生成的substring
上调用String
,并将其结果分配给unicodeOfC
。因此String
值为\u0063
,即。 6个字符\
,u
,0
,0
,6
和3
。
还有什么方法可以让字符串
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,然后是十六进制数字。