Свернуть последовательности пробелов в один символ и обрезать строку - PullRequest
122 голосов
/ 17 апреля 2009

Рассмотрим следующий пример:

"    Hello      this  is a   long       string!   "

Я хочу преобразовать это в:

"Hello this is a long string!"

Ответы [ 13 ]

0 голосов
/ 19 июля 2013

Следующие два регулярных выражения будут работать в зависимости от требований

  1. @ "+" для сопоставления пробелов и табуляции
  2. @ "\\ s {2,}" для сопоставления пробелов, табуляции и разрывов строк

Затем примените метод экземпляра nsstring stringByReplacingOccurrencesOfString:withString:options:range:, чтобы заменить их одним пробелом.

1012 *, например *

[string stringByReplacingOccurrencesOfString:regex withString:@" " options:NSRegularExpressionSearch range:NSMakeRange(0, [string length])];

Примечание: я не использовал библиотеку 'RegexKitLite' для вышеуказанной функциональности для iOS 5.x и выше.

0 голосов
/ 02 февраля 2012

в соответствии с @Mathieu Godart - лучший ответ, но какая-то строка отсутствует, все ответы просто уменьшают пробел между словами, но если есть вкладки или вкладки на месте, как здесь "это текст \ t, и \ tTab между, и так далее" в трехстрочном коде мы будем: строка, которую мы хотим уменьшить, пробелы

NSString * str_aLine = @"    this is text \t , and\tTab between      , so on    ";
// replace tabs to space
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@"\t" withString:@" "];
// reduce spaces to one space
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@" +" withString:@" "
                                                    options:NSRegularExpressionSearch
                                                      range:NSMakeRange(0, str_aLine.length)];
// trim begin and end from white spaces
str_aLine = [str_aLine stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

результат

"this is text , and Tab between , so on"

без замены вкладки результат будет:

"this is text    , and  Tab between , so on"
0 голосов
/ 17 апреля 2009

Альтернативное решение: получите себе копию OgreKit (библиотека регулярных выражений Какао).

  • OgreKit (японская веб-страница - код на английском)
  • OgreKit (Google автоперевод):

Тогда вся функция:

NSString *theStringTrimmed =
   [theString stringByTrimmingCharactersInSet:
        [NSCharacterSet whitespaceAndNewlineCharacterSet]];
OGRegularExpression  *regex =
    [OGRegularExpression regularExpressionWithString:@"\s+"];
return [regex replaceAllMatchesInString:theStringTrimmed withString:@" "]);

Коротко и сладко.

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

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