NSString componentsSeparatedByString - PullRequest
       0

NSString componentsSeparatedByString

2 голосов
/ 18 января 2012

У меня есть строка с сервера. Я идентифицирую определенную подстроку и затем разбиваю основную строку в этой подстроке.

NSString *string = /* getting from server */;
NSString *strAddress = /* Substring of string */;
NSArray *arr = [string componentsSeparatedByString:strAddress];
NSString *strBeforeAddress = [arr objectAtIndex:0];

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

string = @"cxzcvxcv\n14, Beaven Dam Road\nVail, CO81657";
strAddress = @"14, Beaven Dam Road\nVail, CO81657";

Я получаю только один объект в arr, полную строку, что я считаю неправильным. Это должно дать результат как 2 объекта: cxzcvxcv и blank object. Однако, когда

string = @"14, Beaven Dam Road\nVail, CO81657";
strAddress = @"14, Beaven Dam Road\nVail, CO81657";

массив arr в этом случае имеет 1 объект, полную строку. Может кто-нибудь объяснить, что здесь происходит?

Ответы [ 2 ]

12 голосов
/ 18 января 2012

Из ссылки на класс NSString обсуждение метода componentsSeparatedByString:

Подстроки в массиве отображаются в том порядке, в котором они были в получатель. Соседние вхождения строки разделителя дают пустые строки в результате. Аналогично, если строка начинается или заканчивается разделитель, первая или последняя подстрока соответственно, пуст. Например, этот фрагмент кода:

NSString *list = @"Norman, Stanley, Fletcher";

NSArray *listItems = [list componentsSeparatedByString:@", "];

создает массив { @"Norman", @"Stanley", @"Fletcher" }.

Если список начинается с запятой и пробела - например, ", Norman, Stanley, Fletcher" - массив имеет следующее содержимое: { @"", @"Norman", @"Stanley", @"Fletcher" }

Если в списке нет разделителей - например, "Norman" - массив содержит Сама строка, в данном случае { @"Norman" }.

Вывод ваших двух тестовых примеров:

NSString *string = @"cxzcvxcv\n14, Beaven Dam Road\nVail, CO81657";
NSString *strAddress = @"14, Beaven Dam Road\nVail, CO81657";
NSLog(@"%@",[string componentsSeparatedByString:strAddress]);

выходы

(
    "cxzcvxcv\n",
    ""
)

как и ожидалось. И для второго случая

NSString *string = @"14, Beaven Dam Road\nVail, CO81657";
NSString *strAddress = @"14, Beaven Dam Road\nVail, CO81657";
NSLog(@"%@",[string componentsSeparatedByString:strAddress]);
* 1 035 * выходы
(
    "",
    ""
)

снова, как и ожидалось. Я не вижу здесь никаких проблем.

0 голосов
/ 18 января 2012

Если

 string = @"cxzcvxcv\n14, Beaven Dam Road\nVail, CO81657";
 strAddress = @"14, Beaven Dam Road\nVail, CO81657";

Тогда strBeforeAddress будет - cxzcvxcv\n

Если

  string = @"14, Beaven Dam Road\nVail, CO81657";
  strAddress = @"14, Beaven Dam Road\nVail, CO81657";

тогда strBeforeAddress будет nil.

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