VB6中ListView数据拼接异常修复:结果出现多余斜杠
问题原因与修复方案
嘿,我一眼就看出问题出在哪了!你在处理空字符串的分支里,拼接顺序搞反了,还多添加了多余的 /,这才导致最终出现「Value / / Value」的错误格式。
具体问题分析
当StringNumeroTel或StringNumeroCel为空时,你写的代码是:
StringNumeroTel = List_Contactos.ListItems.Item(i).SubItems(3) + " / " + StringNumeroTel
此时StringNumeroTel是空字符串,拼接后结果就变成了第一个号码 + " / "(比如123 / )。等下一个号码进来时,走else分支:
StringNumeroTel = StringNumeroTel + " / " + 第二个号码
最终就会变成123 / / 456——中间多了一个不必要的分隔符。
快速修复原有代码
只需要修改空字符串分支的逻辑,直接赋值第一个号码,不要提前加分隔符:
Dim StringPrefijoTel As String Dim StringNumeroTel As String Dim StringPrefijoCel As String Dim StringNumeroCel As String Dim i As Integer For i = 1 To List_Contactos.ListItems.Count If List_Contactos.ListItems(i).SubItems(1) = "Fijo" Then StringPrefijoTel = List_Contactos.ListItems(i).SubItems(2) If StringNumeroTel = "" Then ' 空的时候直接赋值,不加分隔符 StringNumeroTel = List_Contactos.ListItems.Item(i).SubItems(3) Else StringNumeroTel = StringNumeroTel + " / " + List_Contactos.ListItems.Item(i).SubItems(3) End If Rs!actelcli = StringNumeroTel Rs!preFijo = StringPrefijoTel Else StringPrefijoCel = List_Contactos.ListItems(i).SubItems(2) If StringNumeroCel = "" Then ' 同样修改这里 StringNumeroCel = List_Contactos.ListItems.Item(i).SubItems(3) Else StringNumeroCel = StringNumeroCel + " / " + List_Contactos.ListItems.Item(i).SubItems(3) End If Rs!preCelu = StringPrefijoCel Rs!Celu = StringNumeroCel End If Next i
更优雅的优化方案(推荐)
其实可以用集合先收集所有号码,最后用Join函数自动拼接,这样完全不用判断空字符串,代码更简洁也不容易出错:
' 处理固定电话 Dim telNumbers As New ArrayList Dim lastPrefijoTel As String For i = 1 To List_Contactos.ListItems.Count If List_Contactos.ListItems(i).SubItems(1) = "Fijo" Then lastPrefijoTel = List_Contactos.ListItems(i).SubItems(2) telNumbers.Add List_Contactos.ListItems(i).SubItems(3) End If Next i ' Join会自动用指定分隔符拼接数组元素,不会有多余的符号 Rs!actelcli = Join(telNumbers.ToArray(), " / ") Rs!preFijo = lastPrefijoTel ' 注意:这里会保留最后一个固定电话的前缀,和你原逻辑一致 ' 处理手机号码同理 Dim celNumbers As New ArrayList Dim lastPrefijoCel As String For i = 1 To List_Contactos.ListItems.Count If List_Contactos.ListItems(i).SubItems(1) <> "Fijo" Then lastPrefijoCel = List_Contactos.ListItems(i).SubItems(2) celNumbers.Add List_Contactos.ListItems(i).SubItems(3) End If Next i Rs!Celu = Join(celNumbers.ToArray(), " / ") Rs!preCelu = lastPrefijoCel
⚠️ 小提醒:你原代码中如果有多个固定电话/手机号码,前缀会被最后一条数据覆盖,这个逻辑如果不符合你的需求,需要额外调整前缀的处理方式哦。
内容的提问来源于stack exchange,提问作者user12799076
相关产品推荐
相关产品推荐

