String.Split包含空格或特殊字符

时间:2016-02-16 18:23:34

标签: vb.net split textbox

让我们说这是我的字符串:

Sam,III,Adams

这里 Sam,III 是名字, Adams 是姓氏,我想分开名字和姓氏。为此我做了:

txtbox.Text.Split(",")

但它将萨姆,三世,亚当斯分为三部分。有人可以告诉我如何分隔名字和姓氏,如果我们有任何额外的','用名字或姓氏?

2 个答案:

答案 0 :(得分:0)

您可以使用IndexOf代替String.Split来查找第一个逗号的索引,然后使用Substring来获取逗号两边的部分:

    Dim text = "Sam, III, Adams"
    Dim index = text.IndexOf(",")
    Dim firstName = text.Substring(0, index)
    Dim secondName = text.Substring(index + 1)

答案 1 :(得分:0)

  

名字或姓氏

简单回答:不。 " Sam,III,Adams" - 那是" Sam III" "亚当斯"或者" Sam" " III Adams" - 除了知道逗号部分的所有可能名称或变体之外,应用程序如何才能知道。我猜这个人的名字实际上是" Sam Adams,第三个" - 不确定为什么他们的名字将是" Sam III"。

对另一个答案的评论建议您在有逗号时使用特定的规则 - 如果您可以在有多个逗号时清楚地说明要求,则可以提供更具体的答案,

根据逗号数量,您可能需要一组规则,例如:

    Dim firstname = ""
    Dim surname = ""

    Dim text = "Sam, III, Adams"
    Dim parts = text.Split(",")

    If parts.Length = 1 Then
        firstname = ""
        surname = parts(0)
    else If parts.Length = 2 Then
        firstname = parts(0)
        surname = parts(1)
    else If parts.Length = 3 Then
       ' Rule from question sample, comma in firstname (makes no sense to me, but that's how it's in the question)
        firstname = parts(0) + ", " + parts(1)
        surname = parts(2)
    else If parts.Length = 4 Then
        firstname = parts(0) + ", " + parts(1)
        surname = parts(2) + ", " + parts(3)
    End If

(或使用select case

如果你可以简化规则,那就更清洁了,例如:

姓氏中的所有逗号:

firstname = string.Join(", ", parts.Take(parts.length-1))
surname = parts(parts.length)

名字中的所有逗号:

firstname = parts(0)
surname = string.Join(", ", parts.Skip(1))