2012-12-27 38 views
1

我想在java编程中将带有不可打印字符(反斜杠,左箭头,右箭头等)的字符串转换为可打印字符串。如何在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,109,32,45 ,114,8,8,8]

输出字符串应该是= “RM -r”

我怎样才能陈德良将这个字符串变成可打印的字符串?

+0

当然你可以,你只需要复制shell的行为。我不确定这是否有解决方案。 –

+0

是否要删除不可打印的字符? –

+1

输出字符串“rm -r”而不是“rm -r [K -r'? – Shivam

回答

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 

UPDATE

这个版本保持光标,支持退格键,左箭头,右箭头

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不同,但我认为,如果你想删除非打印字符,你可以如下做我是正确的

+0

正则表达式应该是“\\ P {打印}”,在copypaste –

+0

正确的时候被扭曲了........ – Mawia

+0

您能否提供更多关于您翻译的意思的细节? –

1

String input = "rn -r\b\b\b\b -r[K\b\b\bm -r\b\b\b"; 
String output = input.replaceAll("\\p{Cntrl}", ""); 
0

将字符串转换与非打印字符,通过字符串的字节数组表达迭代和每个字符(1个字节)转换成它的hex等值。

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

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