25

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

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

.concat()如果不使用该方法或+字符串运算符,我将如何逃避它?

final String POSIX_SIGNATURE = "ustar\000"; 

这是无效的,和第一个不一样。

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

这也不是。

4

3 回答 3

23

使用 unicode 转义序列:

"\u000000"

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

于 2016-04-11T19:55:08.130 回答
21

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字符。

于 2016-04-11T20:03:09.037 回答
15

你也可以使用

"ustar\00000"

\后面最多可以跟 3 个八进制数字(在000和之间377),所以\000后面跟"00".

或者,你可以做

"ustar\0\600"

紧随\0其后的是\60(八进制表示'0'),然后是'0'

于 2016-04-11T20:03:57.033 回答