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

VB.NET中拆分字符串并赋值给类对象的实现求助

解决VB.NET字符串拆分并批量赋值Employee对象的问题

首先,你的核心问题出在拆分分隔符的使用方式上:-|@$@|-是一个多字符的分隔符,但你把它声明为Char类型,而String.Split(Char)只能处理单个字符的拆分,这就导致拆分完全不符合预期。下面是完整的解决方案:

步骤说明

  • 第一步:先按|||拆分整个字符串,得到每个员工的独立信息块(注意过滤掉末尾的空字符串)
  • 第二步:对每个员工信息块,用-|@$@|-拆分出EmpId、Name、Value三个字段
  • 第三步:转换字段类型并实例化Employee对象,最终存入列表

完整代码实现

Public Class Employee
    Public Property EmpId As Integer
    Public Property Name As String
    Public Property Value As Boolean
End Class

Sub Main()
    Dim myString As String = "1-|@$@|-TEST1-|@$@|-Yes|||2-|@$@|-TEST2-|@$@|-No|||3-|@$@|-TEST3-|@$@|-Yes|||"
    
    ' 第一步:拆分每个员工的信息块,过滤空项
    Dim employeeBlocks() As String = myString.Split({"|||"}, StringSplitOptions.RemoveEmptyEntries)
    
    Dim employeeList As New List(Of Employee)()
    
    For Each block In employeeBlocks
        ' 第二步:拆分单个员工的三个字段
        Dim fields() As String = block.Split({"-|@$@|-"}, StringSplitOptions.None)
        
        ' 第三步:转换类型并创建对象
        Dim emp As New Employee()
        emp.EmpId = Integer.Parse(fields(0))
        emp.Name = fields(1)
        ' 处理Value的布尔转换:Yes/True/1都转为True,其他转为False
        emp.Value = fields(2).Equals("Yes", StringComparison.OrdinalIgnoreCase) OrElse fields(2) = "1" OrElse fields(2).Equals("True", StringComparison.OrdinalIgnoreCase)
        
        employeeList.Add(emp)
    Next
    
    ' 测试输出验证
    For Each emp In employeeList
        Console.WriteLine($"EmpId: {emp.EmpId}, Name: {emp.Name}, Value: {emp.Value}")
    Next
End Sub

优化建议

如果可以调整字符串格式,建议使用更简洁的分隔符(比如|或者;),避免使用包含特殊符号的复杂分隔符,这样不仅代码更简洁,还能减少转义或拆分出错的概率。例如可以把字符串改成:

1|TEST1|Yes|||2|TEST2|No|||3|TEST3|Yes|||

对应的拆分代码只需要把分隔符替换成|即可,逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:06:39