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 に答える