NSString에서 모든 공백 제거


134

에서 공백을 제거 NSString하려고 시도했지만 시도한 방법 중 아무것도 작동하지 않았습니다.

나는 "this is a test"있고 싶어요 "thisisatest".

whitespaceCharacterSet공백을 제거 해야하는을 사용했습니다 .

NSString *search = [searchbar.text stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceCharacterSet]];

그러나 공백이있는 동일한 문자열을 계속 얻었습니다. 어떤 아이디어?


2
간단한 방법은 없지만이 링크에는 큰 답변이 있습니다.- stackoverflow.com
Coffee

2
@Adel 그러나 대답이 없습니다 =)
Almas Adilbek

답변:


303

stringByTrimmingCharactersInSet 문자열의 시작과 끝에서 문자 만 제거하고 중간 문자는 제거하지 않습니다.

1) 문자열에서 주어진 문자 (예 : 공백 문자) 만 제거 해야하는 경우 다음을 사용하십시오.

[yourString stringByReplacingOccurrencesOfString:@" " withString:@""]

2) 문자 집합 (즉, 공백 문자뿐만 아니라 공백, 탭, 깨지지 않는 공백 등의 공백 문자 ) 을 실제로 제거 해야하는 경우 문자열을 분할 whitespaceCharacterSet한 다음 단어를 한 문자열로 다시 결합 할 수 있습니다 :

NSArray* words = [yourString componentsSeparatedByCharactersInSet :[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSString* nospacestring = [words componentsJoinedByString:@""];

이 마지막 솔루션은 공백뿐만 아니라 모든 공백 문자를 처리 할 수 ​​있다는 장점이 있지만 stringByReplacingOccurrencesOfString:withString:. 따라서 실제로 공백 문자 만 제거해야하고 일반 공백 문자 이외의 다른 공백 문자가없는 경우 첫 번째 방법을 사용하십시오.


훌륭한! 고마워요!
iGatiTech

33

다음과 같이 정규식을 사용하는 것이 좋습니다.

NSString *myString = @"this is a test";
NSString *myNewString = [myString stringByReplacingOccurrencesOfString:@"\\s"
                                     withString:@""
                                        options:NSRegularExpressionSearch
                                          range:NSMakeRange(0, [myStringlength])];
 //myNewString will be @"thisisatest"

NSString에서 자신을 범주화하여 인생을 더욱 쉽게 만들 수 있습니다.

- (NSString *) removeAllWhitespace
{
    return [self stringByReplacingOccurrencesOfString:@"\\s" withString:@""
                                              options:NSRegularExpressionSearch
                                                range:NSMakeRange(0, [self length])];

}

여기에 단위 테스트 방법이 있습니다.

- (void) testRemoveAllWhitespace
{
    NSString *testResult = nil;

    NSArray *testStringsArray        = @[@""
                                         ,@"    "
                                         ,@"  basicTest    "
                                         ,@"  another Test \n"
                                         ,@"a b c d e f g"
                                         ,@"\n\tA\t\t \t \nB    \f  C \t  ,d,\ve   F\r\r\r"
                                         ,@"  landscape, portrait,     ,,,up_side-down   ;asdf;  lkjfasdf0qi4jr0213 ua;;;;af!@@##$$ %^^ & *  * ()+  +   "
                                         ];

    NSArray *expectedResultsArray   = @[@""
                                        ,@""
                                        ,@"basicTest"
                                        ,@"anotherTest"
                                        ,@"abcdefg"
                                        ,@"ABC,d,eF"
                                        ,@"landscape,portrait,,,,up_side-down;asdf;lkjfasdf0qi4jr0213ua;;;;af!@@##$$%^^&**()++"
                                        ];

    for (int i=0; i < [testStringsArray count]; i++)
    {
        testResult = [testStringsArray[i] removeAllWhitespace];
        STAssertTrue([testResult isEqualToString:expectedResultsArray[i]], @"Expected: \"%@\" to become: \"%@\", but result was \"%@\"",
                     testStringsArray[i], expectedResultsArray[i], testResult);
    }
}

2
오,이게 유닛 테스트 사업을 포함하는 것을 좋아합니다. 이제 내 코드를 복사하여 붙여 넣을 수있을뿐만 아니라 해당 코드에 대한 테스트를 복사하여 붙여 넣을 수도 있습니다!
TylerJames

13

사용하기 쉬운 작업 stringByReplacingOccurrencesOfString

NSString *search = [searchbar.text stringByReplacingOccurrencesOfString:@" " withString:@""];

1
그러나 공백 세트가 필요하지 않은 경우에만 동의하십시오. 나는 그것을 사용하려고했지만 문자열에 줄 바꿈이 있음을 깨달았습니다.
mobibob

7

(공백) \u00a0대신 문제가 발생하는 경우 도움이 될 수 있습니다 . 장치 연락처 전화 번호를 추출하려고 할 때이 문제가 발생했습니다. phoneNumber 문자열에 공백이 없도록 수정해야했습니다.

NSString* yourString = [yourString stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];

yourString현재 전화 번호는 언제 였습니다.


이것은 톤을 도왔다! 나도 그것에 붙어 있었다! 고마워요! : D
Rafi

신속한 3을 위해 사용할 수 있습니다yourString.replacingOccurrences(of: "\u{00a0}", with: "")
Okhan Okbay

4

stringByReplacingOccurrencesOfString은 모든 공백을 시작 및 끝 이외의 문자열로 바꿉니다.

사용하다

[YourString stringByTrimmingCharactersInSet:[NSCharacterSet  whitespaceAndNewlineCharacterSet]]

5
사용하라고 말하지만 stringByReplacingOccurrencesOfString예를 들어보십시오 stringByTrimmingCharactersInSet.
Flexicoder

4
- (NSString *)removeWhitespaces {
  return [[self componentsSeparatedByCharactersInSet:
                    [NSCharacterSet whitespaceCharacterSet]]
      componentsJoinedByString:@""];
}

이 코드가 문제를 해결할 수도 있지만, 몇 마디의 설명은이 답변이 미래 독자들에게 귀중한 것이 될 것입니다.
Thom

4

이것은 나를 위해 SWIFT 가장 좋은 방법입니다

        let myString = "  ciao   \n              ciao     "
        var finalString = myString as NSString

        for character in myString{
        if character == " "{

            finalString = finalString.stringByReplacingOccurrencesOfString(" ", withString: "")

        }else{
            finalString = finalString.stringByReplacingOccurrencesOfString("\n", withString: "")

        }

    }
     println(finalString)

그리고 결과는 : ciaociao

그러나 속임수는 이것입니다!

 extension String {

    var NoWhiteSpace : String {

    var miaStringa = self as NSString

    if miaStringa.containsString(" "){

      miaStringa =  miaStringa.stringByReplacingOccurrencesOfString(" ", withString: "")
    }
        return miaStringa as String

    }
}

let myString = "Ciao   Ciao       Ciao".NoWhiteSpace  //CiaoCiaoCiao

4

marco 아래를 사용하여 공간을 제거하십시오.

#define TRIMWHITESPACE(string) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]

다른 파일 호출에서 TRIM :

    NSString *strEmail;
    strEmail = TRIM(@"     this is the test.");

도움이 될 것입니다 ...


3

그것은 당신이 어떤 텍스트 필드에서 텍스트를 가져올 때있는 공백을 제거하기위한 것이지만 문자열 사이의 공백을 제거하려면 사용할 수 있습니다

xyz =[xyz.text stringByReplacingOccurrencesOfString:@" " withString:@""];

빈 공간을 빈 공간으로 대체하고 빈 필드는 다음 방법으로 처리됩니다.

searchbar.text=[searchbar.text stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]];

-1
pStrTemp = [pStrTemp stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

이 스 니펫의 기능에 대해 조금 자세히 설명하고 형식을 수정하십시오.
Yurii

-2

프로젝트의 어딘가에 배치하는 것이 좋습니다.

extension String {
    func trim() -> String {
        return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    }

    func trim(withSet: NSCharacterSet) -> String {
        return self.stringByTrimmingCharactersInSet(withSet)
    }
}

1
이것은 질문에 대한 답변이 아닙니다.
벤 Lachman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.