我想在java编程中将带有不可打印字符(反斜杠、左箭头、右箭头等)的字符串转换为可打印字符串。
For example -
input string = "rn -r\b\b\b\b -r[K\b\b\bm -r\b\b\b"
byte array of input string = [114, 110, 32, 45, 114, 8, 8, 8, 8, 32, 45, 114, 27, 91, 75, 8, 8, 8, 109, 32, 45, 114, 8, 8, 8]
output string should be = "rm -r"
如何将此字符串转换为可打印字符串?
最佳答案
如果您的意思是删除不可打印的字符
System.out.println("rn -r\b\b\b\b -r[K\b\b\bm -r\b\b\b".replaceAll("\\P{Print}", ""));
输出
rn -r -r[Km -r
更新
此版本保留了光标并支持退格键、左箭头和右箭头
String s = "rn -r\b\b\b\b -r[K\b\b\bm -r\b\b\b";
StringBuilder sb = new StringBuilder();
int cursor = 0;
for (char c : s.toCharArray()) {
if (c == '\b') {
if (cursor > 0) {
sb.deleteCharAt(--cursor);
}
} else if (c == 37) { // left arrow
if (cursor > 0) {
cursor--;
}
} else if (c == 39) { // right arrow
if (cursor < sb.length()) {
cursor++;
}
} else if (!Character.isISOControl(c)) {
sb.insert(cursor++, c);
}
}
System.out.println(sb);
打印r -m
。
这与你的rm -r
不同,但我认为我的是正确的
关于java - 如何在java中翻译带有不可打印字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14049726/