嗨,我有一个函数可以找到两个字符串之间最长的公共子字符串。它工作得很好,只是当它到达任何单引号时它似乎会中断:'
这导致它有时无法真正找到最长的子字符串。
谁能帮我调整这个函数,使它在子字符串中包含单引号?我知道它需要在某个我不确定的地方逃脱。
示例:字符串 1:您好,这是杰夫的狗。字符串 2:您好,这是杰夫的狗。
运行该函数后,最长的公共子字符串将是:您好,这是 jeff
编辑:似乎也发生在“-”上。
它不会将单引号后的任何内容作为子字符串的一部分计算在内。这是功能:
Public Shared Function LongestCommonSubstring(str1 As String, str2 As String, ByRef subStr As String)
Try
subStr = String.Empty
If String.IsNullOrEmpty(str1) OrElse String.IsNullOrEmpty(str2) Then
Return 0
End If
Dim num As Integer(,) = New Integer(str1.Length - 1, str2.Length - 1) {}
Dim maxlen As Integer = 0
Dim lastSubsBegin As Integer = 0
Dim subStrBuilder As New StringBuilder()
For i As Integer = 0 To str1.Length - 1
For j As Integer = 0 To str2.Length - 1
If str1(i) <> str2(j) Then
num(i, j) = 0
Else
If (i = 0) OrElse (j = 0) Then
num(i, j) = 1
Else
num(i, j) = 1 + num(i - 1, j - 1)
End If
If num(i, j) > maxlen Then
maxlen = num(i, j)
Dim thisSubsBegin As Integer = i - num(i, j) + 1
If lastSubsBegin = thisSubsBegin Then
subStrBuilder.Append(str1(i))
Else
lastSubsBegin = thisSubsBegin
subStrBuilder.Length = 0
subStrBuilder.Append(str1.Substring(lastSubsBegin, (i + 1) - lastSubsBegin))
End If
End If
End If
Next
Next
subStr = subStrBuilder.ToString()
Return subStr
Catch e As Exception
Return ""
End Try
End Function