关于.net:在vb.net中最佳使用MID和INSTR

best use of MID and INSTR in vb.net

我有一个看起来像这样的字符串

"Patient Name, Doc Name, Patient ID, something else"

我想提取每个这些并将其放入变量中。 这样var1将等于"患者名称",而var2将等于"文档名称"等。使用instr和mid。 最好的方法是什么?


最好的方法是使用Split函数-这是一些vba代码来做到这一点:

1
2
3
4
5
6
7
8
Dim txt as String ="Patient Name, Doc Name, Patient ID, something else"
Dim x as Variant
Dim i as Long

x = Split(txt,",")
For i = 0 To UBound(x)
   Debug.Print x(i)
Next i

在VB.Net中:

1
2
3
4
5
6
7
Dim txt as String ="Patient Name, Doc Name, Patient ID, something else"
Dim split As String() = txt.Split(",")
    For Each s As String In  split
        If s.Trim() <>"" Then
            Console.WriteLine(s)
        End If
    Next s

您应该考虑使用.NET框架中的字符串方法,而不要使用旧版VB函数。

String.Split()将使您获得所需方式的99%。


避免使用Microsoft.VisualBasic.Strings模块中众所周知的方法(例如InStr和Mid)的唯一原因可能是,如果您习惯于使用C#背景中的System.String中的方法,或者您想做出解决方案高度可移植(因此您也可以在Mono上运行它)。

使用这些方法可能会使C#程序员感到困惑(因为第一个字符的索引为1,而不是0),但它们确实具有一个很大的优势:它们服从Option Compare设置!您可能会注意到,如果使用默认的"选项比较二进制",则某些方法甚至比System.String类中的方法更快。这是因为在这种情况下,它们执行二进制比较,而其他方法将必须执行区域性敏感比较。

最后但并非最不重要的一点是,如果将Nothing(空)传递给它们,则所有这些方法都不会引发异常,因为在VB.NET中Nothing等同于空字符串。 Microsoft现在显示了在.NET平台的将来版本中删除这些功能的意图(尽管没有人可以确定在其他版本中还可以幸存)。

仔细看一下VB.NET的"固有"字符串函数和System.String类提供的字符串函数的优点和好处。对于具有Visual Basic背景的VB.NET程序员来说,使用这些"固有"功能可能是解决问题的一种自然方法,通常您不必担心它们的性能。