java - 如何在java中翻译带有不可打印字符的字符串

标签 java string

我想在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/

相关文章:

java - HashSet 代替 ArrayList 在性能上存在缺陷

java - 如何在java中杀死一个线程?

JavaFX WebView 无法与 Spring Boot Maven 一起使用

java - 为什么 Java 方法 "Arrays.copyOf"在处理整数数组和处理对象数组时行为不同

c - 在 C 中获取两个字符串之间的字符串数组

python - 添加反斜杠而不转义

java - 如何从 Eclipse 插件中启动 "import maven project"?

.net - 在 .NET 中将复杂的 boolean 条件从字符串转换为 boolean 值

c - 在C中复制字符串(包括内存分配、指针等)

string - Haskell 在 String 中查找 String 的索引