scala - 奇数位置的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")
解决方案
感谢您提供所需的输出,在这段代码中它是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
编辑:我已将您提到的控制字符范围放在一个解决方案中。
希望能帮助到你。
推荐阅读
- regex - 正则表达式,对新行有限制
- python - Scrapy 看不到 del HTML 标签内的数据
- macos - 卸载所有公式和依赖项 - Homebrew
- r - 在 R 中的两个向量中检查位置相关的重复项
- reactjs - 使用命名函数的 React Typescript Button 道具的正确类型
- java - JavaFx 在第二个场景中将场景 1 中的文本添加到 ListView
- c++ - Visual Studio Code:使用文件系统库
- python - MySQLConnector (Python):每个查询的新数据库连接与单个连接
- android - 如何实现捏缩放,可在堆栈内移动和。颤动中任何小部件的旋转
- python - 使用数据框的 Tkinter pyplot 子图