在vb.net中最好地使用MID和INSTR

时间:2009-10-23 17:39:35

标签: .net vb.net

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

  

“患者姓名,医生姓名,患者ID,其他内容”

我想提取其中的每一个并将其放入变量中。这样var1将等于“患者姓名”var2将等于“Doc name”等...使用instr和mid。最好的方法是什么?

3 个答案:

答案 0 :(得分:7)

最好的方法是使用Split函数 - 这里有一些vba代码:

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中:

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

答案 1 :(得分:2)

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

String.Split()将为您提供99%的目标。

答案 2 :(得分:1)

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

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

最后但并非最不重要的是,如果将Nothing(null)传递给它们,所有这些方法都不会抛出异常,因为在VB.NET中,Nothing等同于空字符串。微软现在打算在.NET平台的未来版本中放弃这些功能(尽管没有人能够确定在另一个版本中存活的东西)。

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