[objective-c] 공백 시퀀스를 단일 문자로 축소하고 문자열 자르기

다음 예를 고려하십시오.

"    Hello      this  is a   long       string!   "

나는 그것을 다음과 같이 변환하고 싶다.

"Hello this is a long string!"



답변

OS X 10.7 이상 및 iOS 3.2 이상

hfossli에서 제공 하는 기본 regexp 솔루션을 사용하십시오 .

그렇지 않으면

좋아하는 regexp 라이브러리를 사용하거나 다음 Cocoa 네이티브 솔루션을 사용하십시오.

NSString *theString = @"    Hello      this  is a   long       string!   ";

NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet];
NSPredicate *noEmptyStrings = [NSPredicate predicateWithFormat:@"SELF != ''"];

NSArray *parts = [theString componentsSeparatedByCharactersInSet:whitespaces];
NSArray *filteredArray = [parts filteredArrayUsingPredicate:noEmptyStrings];
theString = [filteredArray componentsJoinedByString:@" "];


답변

Regex와 NSCharacterSet이 도움을드립니다. 이 솔루션은 선행 및 후행 공백과 여러 공백을 제거합니다.

NSString *original = @"    Hello      this  is a   long       string!   ";

NSString *squashed = [original stringByReplacingOccurrencesOfString:@"[ ]+"
                                                         withString:@" "
                                                            options:NSRegularExpressionSearch
                                                              range:NSMakeRange(0, original.length)];

NSString *final = [squashed stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

로깅 final

"Hello this is a long string!"

가능한 대체 정규식 패턴 :

  • 공백 만 교체 : [ ]+
  • 공백 및 탭 교체 : [ \\t]+
  • 공백, 탭 및 줄 바꿈 바꾸기 : \\s+

성능 요약

손쉬운 확장, 성능, 코드 라인 수 및 생성 된 개체 수가이 솔루션에 적합합니다.


답변

사실, 그것에 대한 매우 간단한 해결책이 있습니다.

NSString *string = @" spaces in front and at the end ";
NSString *trimmedString = [string stringByTrimmingCharactersInSet:
                                  [NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"%@", trimmedString)

( 출처 )


답변

정규식을 사용하지만 외부 프레임 워크가 필요하지 않습니다.

NSString *theString = @"    Hello      this  is a   long       string!   ";

theString = [theString stringByReplacingOccurrencesOfString:@" +" withString:@" "
                       options:NSRegularExpressionSearch
                       range:NSMakeRange(0, theString.length)];


답변

한 줄 솔루션 :

NSString *whitespaceString = @" String with whitespaces ";

NSString *trimmedString = [whitespaceString
        stringByReplacingOccurrencesOfString:@" " withString:@""];


답변

그래야만 …

NSString *s = @"this is    a  string    with lots  of     white space";
NSArray *comps = [s componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

NSMutableArray *words = [NSMutableArray array];
for(NSString *comp in comps) {
  if([comp length] > 1)) {
    [words addObject:comp];
  }
}

NSString *result = [words componentsJoinedByString:@" "];


답변

regex에 대한 또 다른 옵션은 RegexKitLite 이며 iPhone 프로젝트에 포함하기가 매우 쉽습니다.

[theString stringByReplacingOccurencesOfRegex:@" +" withString:@" "];