You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET Soundex项目移除相邻重复数字功能实现求助

嘿,我懂你为啥用Distinct()没搞定了——这个方法是把所有重复的字符都只留一次,但你要的是只删掉相邻的重复数字,逻辑完全不一样嘛!比如如果你的Soundex编码是"C636",Distinct()会直接把第二个6去掉变成"C63",但实际上这个编码里没有相邻重复,应该原封不动保留才对。

给你写个VB.NET的函数,专门处理相邻重复的情况,不管是开头的字母还是后面的数字都能正确处理:

Function RemoveAdjacentDuplicates(input As String) As String
    ' 先处理空输入的情况
    If String.IsNullOrEmpty(input) Then
        Return input
    End If
    
    ' 用StringBuilder来拼接结果,效率比直接字符串拼接高
    Dim resultBuilder As New StringBuilder()
    ' 先把第一个字符加进去
    resultBuilder.Append(input(0))
    
    ' 从第二个字符开始遍历
    For i As Integer = 1 To input.Length - 1
        ' 对比当前字符和结果里的最后一个字符,不一样就追加
        If input(i) <> resultBuilder(resultBuilder.Length - 1) Then
            resultBuilder.Append(input(i))
        End If
    Next
    
    Return resultBuilder.ToString()
End Function

用起来也很简单,直接把你的Soundex编码传进去就行:

' 测试你的例子
Dim carrotSoundex As String = "C663"
Dim cleanedCode As String = RemoveAdjacentDuplicates(carrotSoundex)
' 输出结果是 "C63"

Dim testCode As String = "660"
Dim cleanedTest As String = RemoveAdjacentDuplicates(testCode)
' 输出结果是 "60"

' 再测试一个有非相邻重复的情况
Dim nonAdjacentCode As String = "C636"
Dim cleanedNonAdjacent As String = RemoveAdjacentDuplicates(nonAdjacentCode)
' 结果还是 "C636",这正是我们想要的

这个函数的逻辑很直白:从第一个字符开始,逐个检查后面的字符,只有当它和上一个保留的字符不一样时,才把它加进结果里。这样就精准地去掉了相邻的重复,不会误删非相邻的重复字符。

内容的提问来源于stack exchange,提问作者user9421447

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:46:40