【问题标题】:Split a string and assign to a class object in vb.net拆分字符串并分配给 vb.net 中的类对象
【发布时间】:2018-05-16 03:57:56
【问题描述】:

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

我的字符串如下所示:

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

但我无法按预期拆分它。

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

提前致谢。

【问题讨论】:

  • 为什么无法按预期拆分?什么障碍阻碍你完成任务?
  • 请不要使用不相关的标签。
  • 评论已删除

标签: string vb.net


【解决方案1】:

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

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)
            }

【讨论】:

  • 您能帮我将子字符串值(拆分后)分配给我的类对象吗?我不知道如何每次循环并添加 3 个列表项或键入 myObject(object of Employee)
  • @Santosh 添加一个外循环,在“|||”上拆分首先(即,拆分为单个员工),然后在“-|@$@|-”上拆分后,在内部循环中分配员工属性。基本上,将字符串拆分为员工,然后将员工拆分为值,然后将值分配给员工对象并将其添加到列表中。
  • 抱歉,没有得到太多。我以类似的方式做了,但没有像预期的那样出现。您能否将其添加到答案中。
  • @Santosh 我已经用一个映射示例表达式更新了答案,并对 VB.NET 中字符串拆分如何处理字符串进行了一些改进。
【解决方案2】:

尝试使用正则表达式,按照下一个示例:

        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()

如果你看到了,我使用了两个拆分,第一个用于“|||”然后是“-|@$@|-”。 我在控制台应用程序上运行此代码并且工作正常。

【讨论】:

  • 你能解释一下为什么我们需要使用两个拆分吗?
  • 先分割对象,再分割属性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
相关资源
最近更新 更多