Как получить подстроку из строки? - PullRequest
1 голос
/ 10 июня 2010

У меня маленький вопрос, у меня есть объект NSString (\ n "1 Бесконечный цикл", \ n "Купертино, Калифорния 95014", \ n США \ n)

и я хочу, чтобы подстрока присутствовала во 2-й двойной кавычке и первой запятой 2-й двойной кавычки (например, Купертино) из этой строки. (Примечание: моя строка динамическая)

До сих пор я использовал stringByReplacingOccurrencesOfString: и смог получить "1InfiniteLoop" "CupertinoCA95014" США

Но так и не смог получить Купертино.

Может ли какой-либо другой метод решить эту проблему?

Ответы [ 2 ]

13 голосов
/ 10 июня 2010

Использовать substringWithRange: :

NSRange r = NSMakeRange(20, 29);
NSString *cup = [yourString substringWithRange: r];

После объяснения в вашем комментарии я бы сказал

NSString *cup = (NSString*)[[yourString componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString: @",\""]] objectAtIndex: 4];
1 голос
/ 10 июня 2010

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

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

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

// remember, kids: hard coded number literals are evil
NSString* secondQuotedString = (NString*)[[componentsSeparatedByString:@"\""] objectAtIndex:3];
NSString* upToComma = (NString*)[[componentsSeparatedByString:@","] objectAtIndex:0];

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

...