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

如何从含vbNullChar的char数组创建目标string数组?

解决思路与代码实现

这个场景我之前做串口数据解析的时候碰到过,核心问题是你需要按分隔符(vbNullChar)把字符分组拼接,而不是直接给数组索引赋值单个字符——后者自然会覆盖之前的内容。下面是具体的解决步骤和代码:

核心思路

  • 用一个临时容器(比如StringBuilder)来收集当前分组的字符,避免每次赋值覆盖原有内容
  • 遍历char数组,遇到非分隔符就追加到临时容器;遇到分隔符就把临时容器的内容存入结果集合,然后清空临时容器
  • 最后处理数组末尾可能没有分隔符的情况,把最后一组字符也加入结果
  • 把结果集合转换成你需要的string数组

VB代码示例

' 假设你的char数组是x
Dim x() As Char = {"c"c, "1"c, vbNullChar, "c"c, "2"c}
Dim channelNamesList As New List(Of String)()
' 用StringBuilder比直接拼接字符串效率更高,尤其是字符数量多的时候
Dim currentGroup As New StringBuilder()

For Each ch As Char In x
    If ch = vbNullChar Then
        ' 遇到分隔符,把当前收集的字符串加入列表(避免空字符串)
        If currentGroup.Length > 0 Then
            channelNamesList.Add(currentGroup.ToString())
            currentGroup.Clear()
        End If
    Else
        ' 非分隔符,追加到当前分组
        currentGroup.Append(ch)
    End If
Next

' 处理最后一组(如果数组最后没有以vbNullChar结尾的情况)
If currentGroup.Length > 0 Then
    channelNamesList.Add(currentGroup.ToString())
End If

' 转换成目标string数组
Dim channelNames() As String = channelNamesList.ToArray()

' 验证结果:
' channelNames(0) = "c1"
' channelNames(1) = "c2"

为什么你之前会遇到覆盖问题?

如果之前你是直接写类似channelNames(index) = ch的代码,那每次赋值都会替换掉该索引位置的原有内容,而不是追加。我们需要先把同一组的所有字符拼接成完整字符串,再一次性赋值给对应的数组索引,这样就不会覆盖了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:37:49