我从数据库列中得到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”)
答案 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
编辑:我已经将您提到的控制字符范围放在一个解决方案中。
希望有帮助。