我需要转义以下定义为静态最终的序列
final String POSIX_SIGNATURE = "ustar".concat("\0").concat("00");
.concat()
如果不使用该方法或+
字符串运算符,我将如何逃避它?
final String POSIX_SIGNATURE = "ustar\000";
这是无效的,和第一个不一样。
final String POSIX_SIGNATURE = "ustar\0\00";
这也不是。
我需要转义以下定义为静态最终的序列
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。
Darth Android 有解决方案,但这就是您的尝试没有按您预期的方式工作的原因。
空字符由 表示的原因\0
并不是因为它是一个专门针对空字符的特殊转义序列;这是因为它是最多 3 个八进制数字的八进制转义序列。
您的字符串末尾"ustar\000"
有 1 个空字符,\000
,并且您的字符串末尾"ustar\0\00"
有 2 个空字符,\0
并且\00
.
解决方案正如 Darth Android 之前提到的——使用Unicode 转义,它正好有 4 个十六进制数字,所以额外的0
字符就是 --0
字符。\u0000
是空字符,第 5 和第 6是0
文字0
字符。
你也可以使用
"ustar\00000"
\
后面最多可以跟 3 个八进制数字(在000
和之间377
),所以\000
后面跟"00"
.
或者,你可以做
"ustar\0\600"
紧随\0
其后的是\60
(八进制表示'0'
),然后是'0'
。