regex - 匹配字符串的各个部分
问题描述
我有 2 个字符串,每个字符串包含 25 个字符。例如
X = "0000111111110111111111110"
Y = "0000011111000000000000000"
如果每个具有“1”字符串 Y 的位置在字符串 X 中也有“1”,那么识别真假的最有效方法是什么?在这个例子中,它应该返回 True,因为 X 中有 1 与 Y 中所有 1 的位置相匹配。
我可以阅读每个字符的位置并对所有 25 个字符进行比较,但希望一些聪明的人会知道一种更优雅的方式。
解决方案
更简单的方法是使用Convert.ToInt32()
将字符串解析为二进制文字并执行二进制AND
:
Public Function MatchAsBinary(ByVal x As String, ByVal y As String) As Boolean
Dim x_int = Convert.ToInt32(x, 2)
Dim y_int = Convert.ToInt32(y, 2)
Return (x_int And y_int) = y_int
End Function
更快(发布版本中约 10 倍)的方法是直接比较字符:
Public Function MatchAsChars(ByVal x As String, ByVal y As String) As Boolean
For i As Integer = 0 To y.Length - 1
If y(i) = "1"c AndAlso x(i) = "0"c Then
Return False
End If
Next
Return True
End Function
推荐阅读
- javascript - Javascript 和 CSS 代码字面上出现在我的 HTML 页面上
- maven - 显示异常的 Pom 文件
- sql - 将逗号分隔值拆分为具有固定列数的目标表
- vb.net - 表单即将获得焦点时的事件?
- python - 如何将 for 循环修复到其他事物
- python - 如何使用多处理并行使用 python gneerator?
- javascript - 反应多个输入字段 onChange 不起作用
- segmentation-fault - 尝试在 C 中重新编码 itoa 时出现段错误
- asp.net-core - Blazor 身份验证 - Http 调用确实适用于匿名
- docker - 在 kubernetes 中运行的我的 docker 映像(基于公共 jenkins 代理映像)中缺少文件