1

我想将带有不可打印字符(反斜杠、左箭头、右箭头等)的字符串翻译成 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"

如何将此字符串转换为可打印字符串?

4

3 回答 3

1

如果您的意思是删除不可打印的字符

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但我认为我的是正确的

于 2012-12-27T05:31:07.100 回答
1

如果要删除不可打印的字符,可以执行以下操作。

String input = "rn -r\b\b\b\b -r[K\b\b\bm -r\b\b\b";
String output = input.replaceAll("\\p{Cntrl}", "");
于 2012-12-27T05:36:19.013 回答
0

要转换具有不可打印字符的字符串,请遍历字符串的字节数组表示并将每个字符(1 个字节)转换为其等效的十六进制。

请记住,每个字节的整数表示范围从 0 到 255,这意味着十六进制等效值的范围可以从 00 到 FF。因此,每个字节对应两个十六进制字符。

上面的逻辑给一个字符串一个十六进制字符串,它总是包含可打印的字符(0,1,2..A,B..,F)。

于 2012-12-27T12:55:07.323 回答