我有一个来自应用程序输出的字符串序列,它在“\x00”方法中打印控制字符。例子
\x00R50\x00\x00\x00\x01
我通过一次检查char并添加到字节数组来将其转换为REPL中的scala字符串。
scala> val ar:Array[Byte]=Array(0,82,53,48,0,0,1)
ar: Array[Byte] = Array(0, 82, 53, 48, 0, 0, 1)
scala> val a = ar.map(_.toChar).mkString
a: String = ?R50???
scala>
这似乎很费力…有没有一种快速的方法可以将\x00R50\x00\x00\x00\x01
转换为上面的val a
?
java. lang.String
中有一个构造函数:
public String(byte bytes[])
scala> new String(Array[Byte](0, 82, 53, 48, 0, 0, 1))
res0: String = ?R50???
输入String
只需要遍历一次,但每个Match
都会经历一些转换。
val str = raw"\x00R50\x00\x00\x00\x01"
raw"\\x([0-9a-fA-F]{2})".r.replaceAllIn(str, m =>
java.lang.Integer.parseInt(m.group(1),16).toChar.toString)
//res0: String = ?R50????
每个控制字符的值都被保留。