Здесь у вас есть String
с восьмеричным значением.
System.out.println(
Arrays.toString(
"/Test/Test20\06".toCharArray()
)
);
[/, T, e, s, t, /, T, e, s, t,2, 0,]
Последний символ не печатается, поскольку числовое значение равно 6
(\ 06` в восьмеричном) и не является видимым символом.Это символ ACK.
Таким образом, вы не сможете заменить \0
с помощью метода замены регулярного выражения или String
, поскольку это не String
, а часть представления символа
Мы можем подтвердить это, заменив некоторый символ на регулярное выражение (не то решение, которое вам нужно, просто для демонстрации)
String s = "/Test/Test20\06";
System.out.println(s.replaceAll("[\\000-\\011]", "?"));
/ Test / Test20?
Таким образом, вы можете использовать Pattern
для захвата этих значений и преобразования их в соответствии с вашими потребностями.Вот небезопасное решение (регулярное выражение соответствует вашему случаю, когда восьмеричное находится в конце.
String s = "/Test/Test20\06";
Pattern p = Pattern.compile("(.*?)([\\000-\\011])");
Matcher m = p.matcher(s);
StringBuilder sb = new StringBuilder();
while(m.find()){
sb.append(m.group(1)).append("" + (int)(m.group(2).charAt(0)));
}
System.out.println(Arrays.toString(sb.toString().toCharArray()));
[/, T, e, s, t, /, T, e, s, т, 2, 0, 6]
или в тексте:
/ Test / Test206