我想将带有不可打印字符(反斜杠、左箭头、右箭头等)的字符串翻译成 java 编程中的可打印字符串。
例如 -
输入字符串 = "rn -r\b\b\b\b -r[K\b\b\bm -r\b\b\b"
输入字符串的字节数组 = [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]
输出字符串应该是 = "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但我认为我的是正确的
如果要删除不可打印的字符,可以执行以下操作。
String input = "rn -r\b\b\b\b -r[K\b\b\bm -r\b\b\b";
String output = input.replaceAll("\\p{Cntrl}", "");
要转换具有不可打印字符的字符串,请遍历字符串的字节数组表示并将每个字符(1 个字节)转换为其等效的十六进制。
请记住,每个字节的整数表示范围从 0 到 255,这意味着十六进制等效值的范围可以从 00 到 FF。因此,每个字节对应两个十六进制字符。
上面的逻辑给一个字符串一个十六进制字符串,它总是包含可打印的字符(0,1,2..A,B..,F)。