我需要转义以下定义为静态最终
的序列final String POSIX_SIGNATURE = "ustar".concat("\0").concat("00");
如果不使用.concat()
方法和+
字符串运算符,我将如何避免这种情况?
final String POSIX_SIGNATURE = "ustar\000";
这是无效的,与第一个不同。
final String POSIX_SIGNATURE = "ustar\0\00";
这也不是。
答案 0 :(得分:23)
使用unicode转义序列:
"\u000000"
这是NUL角色(\u0000
),后跟两个0&#39。
答案 1 :(得分:21)
Darth Android有解决方案,但这就是你的尝试没有达到预期效果的原因。
空字符由\0
表示的原因不是因为它是一个特殊的转义序列,仅用于空字符;这是因为它是octal escape sequence of up to 3 octal digits。
您的字符串"ustar\000"
末尾有1个空字符\000
,而您的字符串"ustar\0\00"
末尾有2个空字符,\0
和{{1} }。
解决方案与Darth Android之前提到的一样 - 使用Unicode escape,其中只有4个十六进制数字,因此额外的\00
个字符只是 - 0
个字符。 0
是空字符,第5个和第6个\u0000
是文字0
字符。
答案 2 :(得分:15)
您也可以使用
"ustar\00000"
\
后面最多可以有3个八进制数字(000
和377
之间),因此\000
后跟"00"
。
或者,您可以
"ustar\0\600"
这是\0
,后跟\60
('0'
的八进制),然后是'0'
。