删除先前已连接其他变量的字符串中的重复单词

Posted

技术标签:

【中文标题】删除先前已连接其他变量的字符串中的重复单词【英文标题】:Delete duplicate words in a string that has concatenated other variables previously 【发布时间】:2022-01-15 12:48:10 【问题描述】:

我在 MS Access 中有一个收集 4 个用户反馈的表单。用户填写表单后,有一个名为“sResultAll”的变量将所有反馈(来自多个文本框)连接到其中,并将其值传递给名为“txtRecommendation”的文本框。

sResultAll = sResult1 & sResult2 & sResult3 & sResult4
txtRecommendation.Value = sResultAll

我面临的问题是几个用户提供了几乎相同的反馈,因此我需要一种方法来消除变量 sResultAll 中的重复项。

提前感谢您的任何贡献。

【问题讨论】:

到目前为止你尝试过什么代码?你在哪里遇到了麻烦?请在您的问题中包含这一点。 您可以使用脚本字典去除重复项,然后从字典键创建结果字符串。 非常感谢@BraX!你的方法已经死了!很抱歉我无法分享代码,我以前从未使用过“字典对象”,甚至不知道如何开始编码。 【参考方案1】:

周五晚上 5 点 55 分,无事可做。这是一个免费赠品:

正如@braX 所建议的,Dictionary Object 非常擅长跟踪唯一字符串,因为它可以使用.Exists 函数快速搜索其当前键。这使您可以在将字符串添加到集合之前检查是否已经输入了字符串。

为了改进这个想法,我还建议您在比较它们之前对字符串进行消毒。将它们全部强制为相同大小写并删除非字母数字字符。这样,无论空格、标点符号或大小写如何,字符串仍然会匹配。

Sub Example()
    Const sResult1 As String = "George"
    Const sResult2 As String = "Fred"
    Const sResult3 As String = "John"
    Const sResult4 As String = "gEORGE  "

    Debug.Print Join(DistinctOf(sResult1, sResult2, sResult3, sResult4), ", ")
    'Outputs: George, Fred, John
End Sub
Function DistinctOf(ParamArray Strings() As Variant) As Variant()
    Dim AlphaNumericOnly As Object
    Set AlphaNumericOnly = CreateObject("VBScript.RegExp")
    With AlphaNumericOnly
        .Global = True
        .MultiLine = True
        .Pattern = "[^A-Za-z0-9]+"
    End With

    Dim Distinct_Strings As Object
    Set Distinct_Strings = CreateObject("Scripting.Dictionary")
    
    Dim str As Variant
    For Each str In Strings
        Dim AO_str As String
        AO_str = AlphaNumericOnly.Replace(LCase(str), "")
        If Not Distinct_Strings.exists(AO_str) Then Distinct_Strings.Add AO_str, str
    Next
    
    DistinctOf = Distinct_Strings.Items
End Function

【讨论】:

非常感谢@Toddleson!!!您的示例代码让我想到了如何解决我的需求!

以上是关于删除先前已连接其他变量的字符串中的重复单词的主要内容,如果未能解决你的问题,请参考以下文章

仅用连字符替换单词之间的空格并删除所有其他空格[重复]

使用scala删除长字符串中的重复单词

华为python机试题目:整数与IP地址间的转换图片整理字串的连接最长路径查找提取不重复的整数字符串合并处理字符串最后一个单词的长度删除字符串中出现次数最少的字符

删除重复元素并计算ArrayList中的重复次数

Leetcode(无重复字符的最长子串;删除排序链表中的重复元素II;加一;最后一个单词的长度;相同的树)

删除字符串中出现的重复单词