C# разделенная строка с несколькими разделителями - PullRequest
0 голосов
/ 06 января 2020

Строки:

string one = @"first%second";
string two = @"first%second%third";
string three = @"first%second%third%fourth";

Мне нужно иметь возможность отделить все, что идет после первого разделителя «%». Я бы обычно использовал функцию разделения:

string partofstring = one.Split('%').Last();

или

string partofstring = one.Split('%').[1];

Однако мне нужно иметь возможность получить:

string oneresult = @"second";
string tworesult = @"second%third";
string threresult = @"second%third%fourth";

Ответы [ 4 ]

3 голосов
/ 06 января 2020

string.Split имеет перегрузку , которая позволяет вам указать количество разбиений, которые вы хотите получить обратно. Указав 2 в качестве количества разбиений, вы получите массив с элементом с индексом 0, который вы можете отбросить, и элемент с индексом 1, который в точности соответствует запрошенному выводу

string three = @"first%second%third%fourth";
var result = three.Split(new char[] {'%'}, 2);
Console.WriteLine(result[1]); // ==> second%third%fourth
2 голосов
/ 06 января 2020

Попробуйте это

string partofstring = one.SubString(one.IndexOf('%'));

String.SubString возвращает строку, начиная с указанной позиции до конца строки.

String.IndexOf возвращает первый индекс указанного символа в строке.

0 голосов
/ 06 января 2020

Я улучшил фрагмент кода, заданный @ Preciousbetine

var partofstring = two.IndexOf('%') < 0 ? string.Empty : two.Substring(two.IndexOf('%') + 1);

Это позволит проверить, не содержит ли строка ключ%.

0 голосов
/ 06 января 2020

Либо используйте другую перегрузку string.Split, которая позволяет указать максимальное количество элементов:

var newString = myString.Split('%', 2)[1];

Обратите внимание, если вы используете. NET Framework, вам нужно будет использовать другую перегрузку:

var newString = three.Split(new[] { '%'}, 2)[1];

или рассчитать ее самостоятельно, используя IndexOf и Substring:

var newString = myString.Substring(myString.IndexOf('%') + 1);
...