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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:22:28