Ответ 1
Используйте escape-последовательность unicode:
"\u000000"
Это символ NUL (\u0000
), за которым следуют два 0.
Мне нужно избежать следующей последовательности, определенной как статический окончательный
final String POSIX_SIGNATURE = "ustar".concat("\0").concat("00");
Как мне избежать этого без использования метода .concat()
или оператора строки +
?
final String POSIX_SIGNATURE = "ustar\000";
Это неверно, не то же самое, что и первое.
final String POSIX_SIGNATURE = "ustar\0\00";
И это тоже.
Используйте escape-последовательность unicode:
"\u000000"
Это символ NUL (\u0000
), за которым следуют два 0.
У Darth Android есть решение, но вот причина, по которой ваши попытки не срабатывали так, как вы ожидали.
Причина, по которой нулевой символ представляется \0
, не потому, что это специальная escape-последовательность только для нулевого символа; потому что это восьмеричная escape-последовательность до 3-х восьмеричных цифр.
Ваша строка "ustar\000"
имеет 1 нулевой символ в конце, \000
, а ваша строка "ustar\0\00"
имеет 2 нулевых символа в конце, \0
и \00
.
Решение, как ранее упоминалось Darth Android, использует Unicode escape, который имеет ровно 4 шестнадцатеричных разряда, так что дополнительные символы 0
- 0
символов. \u0000
является нулевым символом, а 5-й и 6-й 0
являются буквальными 0
символами.
Вы также можете использовать
"ustar\00000"
\
может следовать до трех восьмеричных цифр (между 000
и 377
), поэтому это \000
, за которым следует "00"
.
В качестве альтернативы вы можете сделать
"ustar\0\600"
Это \0
, за которым следует \60
(восьмеричный для '0'
), за которым следует '0'
.