首页 > 解决方案 > 匹配字符串的各个部分

问题描述

我有 2 个字符串,每个字符串包含 25 个字符。例如

   X = "0000111111110111111111110"
   Y = "0000011111000000000000000"

如果每个具有“1”字符串 Y 的位置在字符串 X 中也有“1”,那么识别真假的最有效方法是什么?在这个例子中,它应该返回 True,因为 X 中有 1 与 Y 中所有 1 的位置相匹配。

我可以阅读每个字符的位置并对所有 25 个字符进行比较,但希望一些聪明的人会知道一种更优雅的方式。

标签: regexstringvb.net

解决方案


更简单的方法是使用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

推荐阅读