首页 > 解决方案 > 奇数位置的scala-match控制字符

问题描述

我有来自数据库列的 char2hex() 的输出,该列是一串十六进制字符,例如“41424320202020200A20”。我需要检查这个十六进制序列是否包含任何控制字符,即在 ascii 范围 \x00 到 \x1F 之间(换行、换页、回车等)。

我可以检查

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

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

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

scala>

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

我可以像这样组合它们

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

scala>

但这只会随着控制字符的第一次出现而停止。

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

示例:-如果我有像“41424320202020200A200B000C”这样的字符串

那么我的输出应该是 List("0A","0B","00","0C")

标签: scala

解决方案


感谢您提供所需的输出,在这段代码中它是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

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

希望能帮助到你。


推荐阅读