繁体   English   中英

将Unicode字符串“ \\ u0063”转换为“ c”

[英]converting string of unicode “\u0063” into “c”

我正在做一些密码分析作业,并试图编写执行a + b = c的代码。 我的想法是使用unicode。 b +(ba)= c。 问题是我的代码返回了c的unicode值而不是字符串“ 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));

testtest2之间没有区别。 它们都是引用同一个String String 文字 String文字由unicode转义符组成

用于Java编程语言的编译器(“ Java编译器”)首先识别其输入中的Unicode转义, 将ASCII字符\\u\u003c/code>紧跟其后的四个十六进制数字转换为UTF-16代码单元(第3.1节)以表示所指示的十六进制值 ,并且传递所有其他字符不变。

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

在这个

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

String文字"\\\\u\u0026quot; (使用\\字符转义\\字符)的运行时值为\\u\u003c/code> ,即。 两个字符\\u String与调用toHexString(..)的结果连接在一起。 然后,您在结果String上调用substring String并将其结果分配给unicodeOfC 因此, String值为\c ,即。 的6个字符\\u006 ,和3

还有什么办法可以使字符串unicodeOfC打印“ c”?

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

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

然后可以将其打印出来。

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

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

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

现在说我想显示一个反斜杠, System.out.println("\\"); 将是一个编译错误,但System.out.println("\\\\"); 将打印\\

因此,您的第一个字符串是打印文字反斜杠字符,然后是字母u,然后是十六进制数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM