我正在尝试拆分字符串,将值分配给类对象。
我的字符串如下所示:
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
但是我无法按预期分割它。
有任何帮助吗?我可以修改分隔符和对字符串进行必要的更改,以使其简单有效。
提前致谢。
答案 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()
如果你看,我使用两个分裂,首先是“|||”然后为“ - | @ $ @ | - ”。 我在控制台应用程序上运行此代码并正常工作。