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
相关产品推荐
相关产品推荐

