【问题标题】:Dynamic String Splitting in VB.NETVB.NET 中的动态字符串拆分
【发布时间】:2026-02-10 17:35:01
【问题描述】:

我需要做到以下几点:

Dim lstrSource as String = "Hello-Hi"

要在源中获得“嗨”,我们将申请 lstrSource.Split("-")(1)

但是,我的源字符串每次都会改变,拆分操作指令也会用户输入。

所以,我正在努力实现这样的目标。

Dim lstrSpiltInstn as String = "Split("-")(1)"

lstrSource.lstrSplitInstn => 这需要返回“Hi”

是否有可能或有任何其他方法可以实现这一目标。

【问题讨论】:

  • lstrSource.Split("-")(0) 将返回 Hello Hi
  • 分隔符和数组索引已经是变量。你只需要存储它们。

标签: vb.net string random


【解决方案1】:

“Hi”是第二个标记,而不是第一个。除此之外,参数应该是分隔符和索引,而不是方法本身。

所以你可以使用这个方法:

Public Shared Function SplitByGetAt(input As String, delimiter As String, index As Int32, options As StringSplitOptions) As String
    If input Is Nothing Then Throw New ArgumentNullException("input")
    If delimiter Is Nothing Then Throw New ArgumentNullException("delimiter")
    If delimiter.Length = 0 Then Throw New ArgumentException("Delimiter must be specified", "delimiter")
    If index < 0 Then Throw New ArgumentException("Index must be equal or greater than 0", "index")

    Dim tokens = input.Split({delimiter}, options)
    If index >= tokens.Length Then Return Nothing
    Return tokens(index)
End Function

用法:

Dim lstrSource as String = "Hello-Hi"
Dim result As String = SplitByGetAt(lstrSource, "-", 1, StringSplitOptions.None)
' Result: Hi

如果你想让它成为一个扩展方法:

Public Module MyExtensions
    <Extension()>
    Public Function SplitByGetAt(input As String, delimiter As String, index As Int32, options As StringSplitOptions) As String
        If input Is Nothing Then Throw New ArgumentNullException("input")
        If delimiter Is Nothing Then Throw New ArgumentNullException("delimiter")
        If delimiter.Length = 0 Then Throw New ArgumentException("Delimiter must be specified", "delimiter")
        If index < 0 Then Throw New ArgumentException("Index must be greater than 0", "index")

        Dim tokens = input.Split({delimiter}, options)
        If index >= tokens.Length Then Return Nothing
        Return tokens(index)
    End Function
End Module

现在可以这样使用了:

lstrSource.SplitByGetAt("-", 1, StringSplitOptions.None)

【讨论】: