2014-09-02 6 views
-3

мне нужно добиться следующего:Динамическая строка Расщепление

Dim lstrSource as String = "Hello-Hi" 

Чтобы получить «Привет» в источнике, мы будем применять, lstrSource.Split("-")(1).

Но моя исходная строка будет меняться каждый раз, а инструкция по расщеплению также будет введена пользователем.

Итак, я пытаюсь добиться чего-то подобного.

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

lstrSource.lstrSplitInstn => это нужно возвращать «Привет»

Будет ли это возможно, или есть какие-либо другие способы для достижения этой цели.

+1

'lstrSource.Split (" - ") (0)' будет возвращать 'Hello' ** not **' Hi'. –

+0

Разделитель и индекс массива уже являются переменными. Вам просто нужно сохранить их оба. –

ответ

2

«Привет» - это второй токен, а не первый. Кроме того, параметром должен быть разделитель и индекс, а не сам метод.

Таким образом, вы могли бы использовать этот метод:

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) 
Смежные вопросы