拆分字符串并分配给vb.net中的类对象

时间:2018-05-15 18:50:00

标签: string vb.net

我正在尝试拆分字符串,将值分配给类对象。

我的字符串如下所示:

1-|@$@|-TEST1-|@$@|-Yes|||2-|@$@|-TEST2-|@$@|-No|||3-|@$@|-TEST3-|@$@|-Yes|||

我想用分隔符-|@$@|-将上面的每个字符串拆分,并将其分配给我的类对象。我的类如下所示:

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

所以我想将分割后的字符串中的每个值分配给上面的类的对象。

所以它应该是这样的:

EmpId = 1
Name = TEST1
Value = True(Or yes Or 1)

我想循环它并将所有3个Emps(TEST1,TEST2,TEST3)分配给列表或单个Emp对象。

我想分裂如下:

Dim myString As String = "1-|@$@|-TEST1-|@$@|-Yes|||2-|@$@|-TEST2-|@$@|-No|||3-|@$@|-TEST3-|@$@|-Yes|||"
Dim delimiter As Char = "-|@$@|-"

Dim subStrings() As String = myString.Split(delimiter)
For Each substring In subStrings
        //assign here
Next

但是我无法按预期分割它。

有任何帮助吗?我可以修改分隔符和对字符串进行必要的更改,以使其简单有效。

提前致谢。

2 个答案:

答案 0 :(得分:3)

您需要将分隔符声明为数组。你应该将它声明为一个String数组,以利用正确的重载。

Dim delimiter As String= New String() {"-|@$@|-"}

目前正在发生的事情是分隔符的值被设置为' - ',它是从中分配的字符串的第一个字符。这会导致您使用破折号而不是预期的子字符串进行拆分。

您可以使用以下LINQ表达式完全填充您的员工集合:

Dim employees = 
    From employeeRows In myString.Split(New String() {"|||"}, StringSplitOptions.None)
    Let employeeValues = employeeRows.Split(New String() {"-|@$@|-"}, StringSplitOptions.None)
    Where Not employeeValues.Any(Function(x) String.IsNullOrWhiteSpace(x))
    Select New Employee With{
            .EmpId = Integer.Parse(employeeValues(0)),
            .Name = employeeValues(1),
            .Value = If(employeeValues(2) = "Yes", True, False)
            }

答案 1 :(得分:1)

尝试使用Regex表达式,请参阅下一个示例:

        Dim myString As String = "1-|@$@|-TEST1-|@$@|-Yes|||2-|@$@|-TEST2-|@$@|-No|||3-|@$@|-TEST3-|@$@|-Yes|||"


        Dim objects = Text.RegularExpressions.Regex.Split(myString, "\|\|\|", Text.RegularExpressions.RegexOptions.IgnoreCase)
        Dim lst As List(Of Employee) = New List(Of Employee)

        For Each k In objects
            If k.Trim <> "" Then
                Dim props = Text.RegularExpressions.Regex.Split(k, "-\|\@\$\@\|-", Text.RegularExpressions.RegexOptions.IgnoreCase)
                lst.Add(New Employee() With {.EmpId = props(0), .Name = props(1), .Value = If(props(2) = "Yes", True, False)})
            End If
        Next

        Console.WriteLine("{0,10} {1,10} {2,10}", "Id", "Value", "Name")

        lst.ForEach(New Action(Of Employee)(Sub(t)
                                                Console.WriteLine("{0,10} {1,10} {2,10}", t.EmpId, t.Value, t.Name)
                                            End Sub))

        Console.ReadLine()

如果你看,我使用两个分裂,首先是“|||”然后为“ - | @ $ @ | - ”。 我在控制台应用程序上运行此代码并正常工作。