iPhone-SDK: удалить пробелы из строки абзаца? - PullRequest
0 голосов
/ 15 сентября 2009

У меня есть два абзаца в строке. Но содержимое имеет много пробелов между строкой абзаца. Я хочу удалить пробелы из этой большой строки абзаца. Я пытался с помощью NSString * outPutStr = [outPutStr stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]; Но он не удаляет пустые места, которые есть в строке абзаца. Это ничего не делает.

Может кто-нибудь подсказать мне образец?

спасибо.

Клав /

Ответы [ 4 ]

5 голосов
/ 15 сентября 2009

Если вы используете потрясающий фреймворк RegexKitLite , который очень легко внедрить в проект iPhone:

NSString *cleanString = [yourStringWithWhiteSpaces stringByReplacingOccurrencesOfRegex:@" +" withString:@" "];

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

NSString *cleanerString = [cleanString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSString *theCleanestString = [cleanerString stringByReplacingOccurrencesOfString:@"\r" withString:@""];

Примечание * В коде есть более понятные способы сделать это, объединяя их в один шаг, но это способ разбить его на части, чтобы вы могли легко понять, что происходит, и полезен для отладки.

4 голосов
/ 15 сентября 2009

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

NSMutableString* newStr = [NSMutableString stringWithString:oldStr];
NSUInteger numReplacements;
do {
  NSRange fullRange = NSMakeRange(0, [newStr length]);
  numReplacements = [newStr replaceOccurrencesOfString:@"  " withString:@" "
                                               options:0 range:fullRange];
} while(numReplacements > 0);

Прочтите о методе replaceOccurrencesOfString:withString:options:range: (из NSMutableString), чтобы увидеть некоторые детали.

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

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

0 голосов
/ 15 сентября 2009

Я бы предложил добавить категорию на NSString для нормализации строк таким образом.

@implementation NSString (NormalizedString)

-(NSString*)stringByNormalizingCharacterInSet:(NSCharacterSet*)characterSet
                                   withString:(NSString*)replacement;
{
  NSMutableString* result = [NSMutableString string];
  NSScanner* scanner [NSScanner scannerWithString:self];
  while (![scanner isAtEnd]) {
    if ([scanner scanCharactersFromSet:characterSet intoString:NULL) {
      [result appendString:replacement];
    }
    NSString* stringPart = nil;
    if ([scanner scanUpToCharactersFromSet:characterSet intoString:&stringPart]) {
      [result appendString:stringPart];
    }
  }
  return [[result copy] autorelease];
}

@end
0 голосов
/ 15 сентября 2009

Замените все пробельные символы, окруженные непробельными символами, символом, который вряд ли будет в строке, такой как «•». (Вы можете искать в тексте, чтобы найти такой символ. После хороших пробельных символов те, которые вы хотите сохранить, заменяются этим символом, затем проходят и удаляют все пробельные символы (или заменяют их все одним пробелом). Наконец , пройдите и замените символы • пробелом.

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