在java中使用转义序列向字符串追加字节

在java中使用转义序列向字符串追加字节,java,string,escaping,append,byte,Java,String,Escaping,Append,Byte,我希望在字符串中附加一个字节,即16=0x10,使用转义序列在一行代码中完成: String appendedString = new String('\16'+"String"); 这将导致appendedString=0x0E、0x74、0x72、0x69、0x6E、0x67的十六进制表示 使用如下\2: String appendedString = new String('\2'+"String"); 工作正常,导致appendedString=0x02,0x74,0x72,0x69

我希望在字符串中附加一个字节,即16=0x10,使用转义序列在一行代码中完成:

String appendedString = new String('\16'+"String");
这将导致appendedString=0x0E、0x74、0x72、0x69、0x6E、0x67的十六进制表示

使用如下\2:

String appendedString = new String('\2'+"String");
工作正常,导致appendedString=0x02,0x74,0x72,0x69,0x6E和0x67的十六进制表示

使用\10:

String appendedString = new String('\10'+"String");
结果为appendedString=0x08,0x74,0x72,0x69,0x6E和0x67的十六进制表示形式

有人可能会善意地解释这一点,并提出解决方案。谢谢。

\10
是八进制的,这就是为什么你得到U+0008

我不相信有任何转义格式使用十进制;我建议使用
\uxxx
格式,或支持字符的特定转义序列(
\r
\n
等)。因此,对于第二种情况,您可以使用
\u000a
-或者在这种情况下只使用
\n
。第一种方法是使用
\u0010

有关转义序列的更多详细信息,请参见


我还强烈建议您不要将它们视为字节——它们是字符(或者UTF-16代码单元,如果您想更精确的话)。

问题是您使用的是八进制转义。定义转义,包括八进制转义

八角景观: \八重晶石 \八达吉特八达吉特 \零到三个八进制数八进制数

因此,
\16
是十进制的字符
14
,或十六进制的字符
0x0E

字符
\2
保留为十进制和十六进制的
2

字符
\10
是十进制的
8
,或十六进制的
0x08

要使用十六进制转义,请使用Unicode转义,在中定义:

UnicodeScape:

\ UnicodeMarker HexDigit HexDigit HexDigit HexDigit
UnicodeMarker:

u
UnicodeMarker u

例如
\u0016
\u0002
,和
\u0010
,阿汉,我忽略了一个事实,Java将其视为八进制。谢谢,我一直想知道为什么没有任何转义格式使用以10为基数的数字作为代码点——我的意思是用我能想到的任何语言。