Java 转义两个零旁边的空字节

Java 转义两个零旁边的空字节,java,unicode-escapes,Java,Unicode Escapes,我需要转义以下定义为静态final的序列 final String POSIX_SIGNATURE = "ustar".concat("\0").concat("00"); 如果不使用.concat()方法或+字符串运算符,我将如何转义此操作 final String POSIX_SIGNATURE = "ustar\000"; 这是无效的,与第一个不同 final String POSIX_SIGNATURE = "ustar\0\00"; 这个也不是。请使用unicode转义序列:

我需要转义以下定义为静态final的序列

final String POSIX_SIGNATURE = "ustar".concat("\0").concat("00");
如果不使用
.concat()
方法或
+
字符串运算符,我将如何转义此操作

final String POSIX_SIGNATURE = "ustar\000"; 
这是无效的,与第一个不同

final String POSIX_SIGNATURE = "ustar\0\00"; 

这个也不是。请使用unicode转义序列:

"\u000000"

这是NUL字符(
\u0000
),后跟两个0。

达斯Android有解决方案,但以下是您的尝试未能按预期方式工作的原因

\0
表示空字符的原因不是因为它只是空字符的特殊转义序列;这是因为它是一个

您的字符串
“ustar\000”
末尾有一个空字符,
\000
,您的字符串
“ustar\0\00”
末尾有两个空字符,
\0
\00

该解决方案如Darth Android之前所述——使用a,它正好有4个十六进制数字,因此额外的
0
字符就是--
0
字符。
\u0000
是空字符,第5个和第6个
0
s是文本
0
字符。

您也可以使用

"ustar\00000"
\
后面最多可以跟3个八进制数字(介于
000
377
之间),因此这是
\000
后面跟
“00”

或者,你也可以这样做

"ustar\0\600"

这是
\0
后接
\60
(八进制表示
'0'
)后接
'0'
,怎么样?作为一个旁注,
字符串的串接是在编译过程中完成的,所以没有理由不能使用
(“ustar”+“\0”+“00”)之类的东西
如果您认为它比没有连接的解决方案更清晰。参见,例如,伟大的问题+1.我不知道java有可变长度的八进制字符。每天我都能学到更多关于这门语言的奇怪的东西!不再在任何不重要的字符串上为我添加.concat()!我同意@Radiodef,在这种情况下,看到串联比必须计算零并记住有多少是转义码的一部分以及有多少是实际的零更不令人惊讶。由于它是在编译时解析的,当所有的值都是常量时,我不明白为什么要使用八进制或unicode转义。考虑到它的可读性,我将使用编译时常量
“\0”+“00”
,因此编译后的代码是相同的。