标量匹配控制字符在奇数位置

时间:2019-04-26 10:33:59

标签: scala

我从数据库列中得到char2hex()的输出,该列是一串十六进制字符,例如“ 41424320202020200A20”。我需要检查此十六进制序列是否包含任何控制字符,即介于\ x00到\ x1F之间的范围(换行,换页,回车等)。

我可以检查

scala> val x = "41424320202020200A20"
x: String = 41424320202020200A20

scala> x.contains("0A")
res107: Boolean = true

scala> x.indexOf("0A")
res109: Int = 16

scala>

但是我需要确保在字符串x的奇数位置始终匹配“ 0A”,以便正确检查十六进制序列。

我可以像把它们结合起来

scala> x.indexOf("0A") %2==0  && x.contains("0A")
res111: Boolean = true

scala>

但这只会在第一次出现控制字符时停止。

如何从十六进制字符串中获取所有控制字符?。

示例:-如果我有类似“ 41424320202020200A200B000C”的字符串

然后我的输出应为List(“ 0A”,“ 0B”,“ 00”,“ 0C”)

1 个答案:

答案 0 :(得分:2)

感谢您提供所需的输出,在此代码中,该代码为res

val x = "41424320202020200A200B000C"
val controlCharacters = (0x00 to 0x1F).map(c => f"$c%02X".toUpperCase)

val res = (x.toUpperCase.grouped(2).toSeq intersect controlCharacters).toList

编辑:我已经将您提到的控制字符范围放在一个解决方案中。

希望有帮助。