Vb.net 字符串。拆分为包含空格或特殊字符

Vb.net 字符串。拆分为包含空格或特殊字符,vb.net,split,textbox,Vb.net,Split,Textbox,假设这是我的字符串: 山姆、三世、亚当斯 这里Sam,III是名字,Adams是姓氏,我想把名字和姓氏分开。为此,我做了: txtbox.Text.Split(",") 但是它把山姆,三世,亚当斯分为三个部分。如果名字或姓氏中有多余的“,”可以让我知道如何区分名字和姓氏吗?而不是字符串。拆分可以用来查找第一个逗号的索引,然后获取逗号两侧的部分: Dim text = "Sam, III, Adams" Dim index = text.IndexOf(",") Dim

假设这是我的字符串:

山姆、三世、亚当斯

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

txtbox.Text.Split(",")

但是它把山姆,三世,亚当斯分为三个部分。如果名字或姓氏中有多余的“,”可以让我知道如何区分名字和姓氏吗?

而不是字符串。拆分可以用来查找第一个逗号的索引,然后获取逗号两侧的部分:

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

简单回答:不,“Sam,III,Adams”-是“Sam III”“Adams”还是“Sam”“III Adams”-除了知道逗号部分的所有可能名称或变体之外,应用程序如何可能知道其他内容。我猜这个人的名字应该是“山姆·亚当斯,第三个”——不知道为什么他们的名字会是“山姆三世”

对另一个答案的评论表明,当有逗号时,您确实需要使用特定的规则-如果您可以在有多个逗号时明确说明要求,则可以提供更具体的答案

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

    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
(或使用
选择案例

如果你能简化规则,那么它就更干净了,例如:

姓氏中的所有逗号:

firstname = string.Join(", ", parts.Take(parts.length-1))
surname = parts(parts.length)
名字中的所有逗号:

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

处理CSV文件中给定字段中逗号的常用方法是用双引号括起来,即,
“Sam,III”,Adam
。在这种情况下,您可以使用CSV解析器(
TextFieldParser
是一个很好的解析器)来处理带引号和不带引号字段的混合。您能指望姓氏中永远不会有逗号吗?(听起来好像不是。)很多像这样的问题对人类来说都很容易。如果是这样的话,那么您的第一步应该是明确说明您将如何处理传入的数据。一旦你有了明确的英语指令,把它们转换成代码就容易多了。能不能给你一些示例。。我以前从未使用过TextFieldParser。。谢谢@Tim根据问题所述,我假设您打算在那里使用LastIndexOf(),因为您目前拥有的是
Sam
III,Adams
谢谢您的回答,我有点担心,,,因为我在db中的名字和姓氏字段在某些记录中有多个逗号(“,”)。。。关于逗号的数量没有唯一的规则。。如果我们的名字和姓氏都有两个逗号,我怎么能把它们分开。。。如果我们在逗号(,)的两边用额外的空格分隔名字和姓氏,我们可以这样做吗???@Knowledge2Share我不认为有一种自动处理名字或第二个名字或两者中逗号的故障安全方法。一种选择是根据最常见的情况自动转换,然后手动识别和修复其他情况。