c # подстрока indexof - PullRequest
       13

c # подстрока indexof

6 голосов
/ 04 мая 2011

У меня есть строка, которая выглядит следующим образом - "FirstName||Sam LastName||Jones Address||123 Main ST ..." (еще 100 различных значений)

Я хочу найти только Сэма и Джонса из всей строки.

так строка firstname = originalstring.substring ... и т. Д.

Кто-нибудь знает, как я могу это сделать?

ДОПОЛНИТЕЛЬНО - Я думаю, что забыл упомянуть пару вещей.

FirstName||Sam\r\n MiddleName||\r\n LastName||Jones\r\n ....

Так что теперь, если я посчитаю количество символов, которые мне не помогут, может понадобиться больше элементов, чем просто имя и фамилия .

Ответы [ 5 ]

7 голосов
/ 04 мая 2011

Использование Регулярные выражения :

string myString = "FirstName||Sam LastName||Jones Address||123 Main ST...";
string pattern = @"FirstName\|\|(\w+) LastName\|\|(\w+) ";
Match m = Regex.Match(myString, pattern);
string firstName = m.Groups[1].Value
string lastName = m.Groups[2].Value;

См. Его демонстрацию здесь .

4 голосов
/ 04 мая 2011

Я думаю, что это может работать лучше, чем подход .Split. Если бы вы имели || между «Сэм» и «Фамилия», то вы наверняка захотите. Разделить. Как бы то ни было, это может быть лучше.

    string inStr = "FirstName||Sam LastName||Jones Address||123 Main ST ";
    int fStart = inStr.IndexOf("FirstName") + "FirstName".Length + "||".Length;
    int fEnd = inStr.IndexOf(" LastName");

    string FirstName = inStr.Substring(fStart, fEnd - fStart);
1 голос
/ 04 мая 2011

Я бы разбил строку дважды один раз на "", а затем снова на || получить значения имени и фамилии

string [] ary = s.Split(" ");
string [] key;
string firstname;
string lastname;
foreach (string val in ary ) {
    key = val.Split("||");
    if ( key[0] == "FirstName") {
         firstname = key[1];
}
if ( key[0] == "LastName") {
   lastname = key[1];
}
}
0 голосов
/ 04 мая 2011

как то так string firstname = originalstring.substring(indexof("FirstName") + 11, ((indexof("LastName) - indexof("FirstName") + 11 )

таким образом, вы получите первую букву после || и до первой буквы перед "фамилией" то же самое относится и к фамилии, вы просто меняете имя на фамилию, а фамилию на адрес

edit: моя вина ... это не substring.(indexOf..., а

originalString.Substring(origianlString.IndexOf("FirstName) + 11, (originalString.IndexOf("LastName") - originalString.IndexOf("FirstName") + 11) и при поиске фамилии это не + 11, а 10, потому что "LastName".Length + + "||".Length = 10

0 голосов
/ 04 мая 2011
str = Str.Split("||")[1].split(" ")[0] //Sam
str = Str.Split("||")[2].split(" ")[0] // Jones
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...