VB.NET: Как загрузить следующие значения из строки в коллекцию - PullRequest
2 голосов
/ 14 января 2011

у меня есть строка = "/a/value1/x/valueforx/b/value2/c/value3"

ключи a, b и c могут быть в любом порядке входящей строки и всегда будут разделяться косой чертой.

Что мне нужно сделать, это найти a, b, c и затем добавить их значения в collection

Ответы [ 5 ]

2 голосов
/ 14 января 2011

Используйте функцию string.Split .

Затем переберите результаты и выберите все, что хотите получить.

например. что-то вроде (C #):

var splitted = "/a/value1/x/valueforx/b/value2/c/value3".Split('/');

for ( var index = 0; index<splitted.Length; ++index )
{
    if ( s=="a" )
    {
        var valueOfA = s[index+1];
        // Process valueOfA.
    }

    // Same for "b" and "c".
}

То же самое в VB.NET:

Dim splitted = "/a/value1/x/valueforx/b/value2/c/value3".Split("/"C)

For index As Integer = 0 To splitted.Length - 1
    If s = "a" Then
        ' Process valueOfA.
        Dim valueOfA = s(index + 1)

        ' Same for "b" and "c".
    End If
Next

Я пропустил проверку ошибок здесь (т.е. проверки границ массива)

0 голосов
/ 14 января 2011

Добавьте это в начало вашего кода:

Imports System.Text.RegularExpressions

Затем используйте это:

Dim mc As MatchCollection = Regex.Matches("/a/value1/x/valueforx/b/value2/c/value3", "(?<=/[abc]/)[a-zA-Z0-9]*")

Чтобы поместить эти совпадения в коллекцию строк по запросу, вы можете просто добавить это послекод выше:

Dim sc As New Collections.Specialized.StringCollection
For Each m As Match In mc
  sc.Add(m.Value)
Next

Используя ваш ввод, вы получите совпадения со значениями

  • value1
  • value2
  • value3
0 голосов
/ 14 января 2011
string s = "/a/value1/b/value2/c/value3";
List<KeyValuePair<string, string>> kvList = new List<KeyValuePair<string, string>>();
string[] strList = s.Split(new char[]{'/'} ,  StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i <= strList.Length - 2 ; i += 2)
  {
    KeyValuePair<string, string> keyValue = 
         new KeyValuePair<string, string>   (strList[i] , strList[i + 1]);
    kvList.Add(keyValue);


   }

это C # ..

0 голосов
/ 14 января 2011

Как сказал Уве Кейм, используйте String.Split. Я бы сделал быструю функцию, которая возвращает словарь.

Этот код не проверен, но вам следует начать ...

Public Function GetConfigFromMagicString(ByVal sSource as string) as Dictionary(of String, string)
    Dim ConfigDict as Dictionary (of String, String)
    Dim Pieces as string() = sSource.split("/")
    For x as Integer = 0 to Pieces.Length-1 Step 2
        ConfigDict.add(pieces(x), pieces(x+1)
    Next x
    return ConfigDict
End Function

Оттуда вы просто получаете это так ...

Dim myConfig as Dictionary (of string, string) = getConfigFromMagicString("a/value1/x/valueforx/b/value2/c/value3")
msgbox(myConfig.Item("a"))
0 голосов
/ 14 января 2011

Это должно охватывать основы алгоритма. Потребуется небольшая очистка, чтобы убедиться, что нет непредвиденных условий, которые могут вызвать исключения.

Dim myDict as Dictionary(Of String, String) = New Dictionary(Of String, String)()
Dim myStr as String = "/a/value1/b/value2/c/value3"

Dim temp() As String = myStr.Split("/"c)

For i As Integer = 0 to temp.Length Step 2
    'Assumes that it will always be an array length divisible by
    '2. If this is not the case, logic is necessary to prevent
    'for loop from bombing at the end of the sequence

    'EDIT: for clarification
    Select Case temp(i)
        Case "a", "b", "c"
            myDict(temp(i)) = temp(i + 1)

        DefaultCase
            Continue
    End Select
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...