【问题标题】:Separate the new string that the new string contains the string in old string分离新字符串,新字符串包含旧字符串中的字符串
【发布时间】:2016-04-29 08:17:25
【问题描述】:

我是编程新手,想问一下是否可以将下面的字符串分开。我正在使用 Visual Basic。基本上我下面有两个字符串:

字符串 1:gOldStr= TEDDYBEARBLACKCAT

字符串 2 = gNewStr= BLACKCATWHITECAT

我想通过查看字符串 1 中的确切值来分隔字符串 2

所以我的 String2 是字符串 1 = BLACKCAT 的一部分

新的字符串 2 = WHITECAT

我已经尝试过下面的脚本,但它并不总是有效。可以建议我更好的逻辑吗?谢谢2

For i=1 to Len(gOldStr)
        TempStr = Left$(gNewStr,i) 
        Ctr1 = InStr(gOldStr, TempStr)
        gTemporary = Mid$(gOldStr,Ctr1)

        gTemporary = Trim(gTemporary)

        Ctr2 = StrComp(gOldStr, gTemporary)
        If Ctr2=1 Then
                gTemporary2 = Replace(gNewStr,gTemporary,"")
                Exit For
        End If
Next i 

【问题讨论】:

  • 欢迎来到 Stackoverflow。使用InStr 将在“TEDDYBEARBLACKCAT”中搜索“BLACKCATWHITECAT”。您需要分隔 String1 中的单词,然后将这些单词放入 Array 或为每个搜索词设置单独的字符串。
  • 您好,Jean,感谢您的回复。实际上,当我尝试执行 Ctr1 = InStr(gOldStr, gNewStr) 时,它会以 0 位置返回给我。虽然我也无法手动分隔单词,因为这两个数据都是由用户输入的。
  • @nopio 它给你 0,因为 InStr 检查整个 gNewStr 是否在 gOldStr 内,这不是因为它们不完全相同。请参阅下面的答案...

标签: string vba actuate


【解决方案1】:

如果公共部分总是在第一个结尾和第二个开头,你可以从结尾看,像这样:

Dim strMatchedWord As String
For i=1 to Len(gOldStr)
    If i>Len(gNewStr) Then Exit For  'We need this to avoid an error
    Test1 = Right$(gOldStr, i)
    Test2 = Left$(gNewStr, i)

    If Test1 = Test2 Then
        strMatchedWord = Test1     'Store your match is Test1
    End If
Next
Debug.Print strMatchedWord 'Once the loop finishes it contains the longest match 

我修改了代码,使循环在遍历完整字符串之前不会退出。这样,它将在循环结束时为您提供最长的匹配。

【讨论】:

  • 嗨@ib11 感谢您的输入,是的,这也有效。但我在想如果字符串有重复字符,这种方法也不会得到正确的字符串。示例:字符串 1:AAADEFDEF 字符串 2:DEFDEFJJJWWW
  • 好的。我更新了代码。现在它遍历整个字符串,如果找到匹配项就存储它,所以到最后你有最长的一个。
  • 嗨@ib11 谢谢你,它工作得很好。非常感谢。
  • 优秀。请不要忘记投票并接受答案:What should I do when someone answers my question?
猜你喜欢
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多