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
相关产品推荐
相关产品推荐

