转义两个零旁边的空字节

时间:2016-04-11 19:51:47

标签: java unicode-escapes

我需要转义以下定义为静态最终

的序列
final String POSIX_SIGNATURE = "ustar".concat("\0").concat("00");

如果不使用.concat()方法和+字符串运算符,我将如何避免这种情况?

final String POSIX_SIGNATURE = "ustar\000"; 

这是无效的,与第一个不同。

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

这也不是。

3 个答案:

答案 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个八进制数字(000377之间),因此\000后跟"00"

或者,您可以

"ustar\0\600"

这是\0,后跟\60'0'的八进制),然后是'0'