如何从含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
相关产品推荐
相关产品推荐

