NSString 끝에서 공백 자르기


답변:


900

이 답변에서 가져 왔습니다 : https : //.com/a/5691567/251012

- (NSString *)stringByTrimmingTrailingCharactersInSet:(NSCharacterSet *)characterSet {
    NSRange rangeOfLastWantedCharacter = [self rangeOfCharacterFromSet:[characterSet invertedSet]
                                                               options:NSBackwardsSearch];
    if (rangeOfLastWantedCharacter.location == NSNotFound) {
        return @"";
    }
    return [self substringToIndex:rangeOfLastWantedCharacter.location+1]; // non-inclusive
}

156
문자 세트에 개행을 포함 시키려면을 사용하십시오 whitespaceAndNewlineCharacterSet.
penfold

9
약간의 참고 사항 :이 방법은 양쪽 끝에서 공백을 제거합니다. 문자열 내부에서 공백을 제거하지 않습니다.
Alex

10
질문에 대답하지 않으면 얼마나 많은 공감대를 얻는 지 이해할 수 없습니다. 귀하의 솔루션은 문자열의 시작 부분에서 공백을 제거하므로 요청하지 않았습니다.
James Boutcher

4
@JamesBoutcher 너무 많은 투표를받는 이유는 Google에서 "trim NSString"을 찾게 되었기 때문에이 질문에 대한 정답입니다. OP가 다른 것을 요구 한 것은 사실입니다.
Dan Rosenstark

20

또 다른 해결책은 가변 문자열을 생성하는 것입니다.

//make mutable string
NSMutableString *stringToTrim = [@" i needz trim " mutableCopy];

//pass it by reference to CFStringTrimSpace
CFStringTrimWhiteSpace((__bridge CFMutableStringRef) stringToTrim);

//stringToTrim is now "i needz trim"

13

여기 있습니다 ...

- (NSString *)removeEndSpaceFrom:(NSString *)strtoremove{
    NSUInteger location = 0;
    unichar charBuffer[[strtoremove length]];
    [strtoremove getCharacters:charBuffer];
    int i = 0;
    for(i = [strtoremove length]; i >0; i--) {
        NSCharacterSet* charSet = [NSCharacterSet whitespaceCharacterSet];
        if(![charSet characterIsMember:charBuffer[i - 1]]) {
            break;
        }
    }
    return [strtoremove substringWithRange:NSMakeRange(location, i  - location)];
}

이제 전화하십시오. 앞면에 공백이 있고 끝에 공백이 있고 끝에 공백을 제거하려는 경우 다음과 같이 호출 할 수 있습니다.

NSString *oneTwoThree = @"  TestString   ";
NSString *resultString;
resultString = [self removeEndSpaceFrom:oneTwoThree];

resultString 그런 다음 끝에 공백이 없습니다.


8

Swift에서 문자열의 시작과 끝에서만 공백을 제거하려면

스위프트 3

string.trimmingCharacters(in: .whitespacesAndNewlines)

이전 스위프트 버전

string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))

1
이것이 공백과 줄 바꿈 문자를 모두 트리밍하지 않습니까? 질문은 끝에서 손질하는 방법을 묻습니다.
Giorgos Ath

@GiorgosAth 아니요 문자열의 시작 또는 끝 부분에서만 문자를 자릅니다. Apple 문서에서 stringByTrimmigCharactersInSet:- "주어진 문자 세트에 포함 된 수신자 문자의 양쪽 끝을 제거하여 작성된 새 문자열을 리턴합니다." developer.apple.com/reference/foundation/nsstring/…
lostAtSeaJoshua

@GiorgosAth 또한 Swift에서 허용되는 답변과 동일한 코드입니다.
lostAtSeaJoshua

문제는 끝에서 제거하는 것에 관한 것이었다. 이 답변은 처음과 끝에서 제거됩니다. 따라서 이것은 올바른 답변이 아닙니다.
패트릭

8
NSString *trimmedString = [string stringByTrimmingCharactersInSet:
                              [NSCharacterSet whitespaceAndNewlineCharacterSet]];
//for remove whitespace and new line character

NSString *trimmedString = [string stringByTrimmingCharactersInSet:
                              [NSCharacterSet punctuationCharacterSet]]; 
//for remove characters in punctuation category

다른 많은 문자 세트가 있습니다. 요구 사항에 따라 직접 확인하십시오.


1
이것이 공백과 줄 바꿈 문자를 모두 트리밍하지 않습니까? 질문은 끝에서 손질하는 방법을 묻습니다.
Giorgos Ath

@ giorgos-ATH이 - 네, 끝에서 공백을 제거는
g212gs

문제는 끝에서 제거하는 것에 관한 것이었다. 이 답변은 처음과 끝에서 제거됩니다. 따라서 이것은 올바른 답변이 아닙니다.
패트릭

4

스위프트 버전

문자열 끝에서 공백 만 자릅니다.

private func removingSpacesAtTheEndOfAString(var str: String) -> String {
    var i: Int = countElements(str) - 1, j: Int = i

    while(i >= 0 && str[advance(str.startIndex, i)] == " ") {
        --i
    }

    return str.substringWithRange(Range<String.Index>(start: str.startIndex, end: advance(str.endIndex, -(j - i))))
}

문자열 양쪽의 공백을 잘라냅니다.

var str: String = " Yolo "
var trimmedStr: String = str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())

1
문제는 끝에 공백을 다듬는 것에 관한 것입니다. 코드가 양쪽을 다듬습니다.
JakubKnejzlik

이 코드는 컴파일되지 않습니다. countElements () 및 advance () 메소드가 정의되지 않았습니다.
petrsyn

4

선택한 후행 문자 만 제거됩니다.

func trimRight(theString: String, charSet: NSCharacterSet) -> String {

    var newString = theString

    while String(newString.characters.last).rangeOfCharacterFromSet(charSet) != nil {
        newString = String(newString.characters.dropLast())
    }

    return newString
}

3

스위프트에서

문자열의 양쪽에서 공백과 개행을 자르려면 :

var url: String = "\n   http://example.com/xyz.mp4   "
var trimmedUrl: String = url.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())

3

Objective-C에서 양쪽 끝 대신 한쪽 끝만 자르는 간단한 솔루션 :

@implementation NSString (category)

/// trims the characters at the end
- (NSString *)stringByTrimmingSuffixCharactersInSet:(NSCharacterSet *)characterSet {
    NSUInteger i = self.length;
    while (i > 0 && [characterSet characterIsMember:[self characterAtIndex:i - 1]]) {
        i--;
    }
    return [self substringToIndex:i];
}

@end

시작 만 다듬기위한 대칭 유틸리티 :

@implementation NSString (category)

/// trims the characters at the beginning
- (NSString *)stringByTrimmingPrefixCharactersInSet:(NSCharacterSet *)characterSet {
    NSUInteger i = 0;
    while (i < self.length && [characterSet characterIsMember:[self characterAtIndex:i]]) {
        i++;
    }
    return [self substringFromIndex:i];
}

@end

3

모든 후행 공백 문자 를 다듬기 위해 ( 실제로 당신의 의도 라고 생각합니다 ) 다음은 매우 깨끗하고 간결한 방법입니다.

스위프트 5 :

let trimmedString = string.replacingOccurrences(of: "\\s+$", with: "", options: .regularExpression)

목표 -C :

NSString *trimmedString = [string stringByReplacingOccurrencesOfString:@"\\s+$" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, string.length)];

정규식으로 대시가있는 한 줄.


1

해결책은 여기에 설명되어 있습니다 : NSString의 오른쪽 끝에서 공백을 제거하는 방법?

NSString에 다음 범주를 추가하십시오.

- (NSString *)stringByTrimmingTrailingCharactersInSet:(NSCharacterSet *)characterSet {
    NSRange rangeOfLastWantedCharacter = [self rangeOfCharacterFromSet:[characterSet invertedSet]
                                                               options:NSBackwardsSearch];
    if (rangeOfLastWantedCharacter.location == NSNotFound) {
        return @"";
    }
    return [self substringToIndex:rangeOfLastWantedCharacter.location+1]; // non-inclusive
}

- (NSString *)stringByTrimmingTrailingWhitespaceAndNewlineCharacters {
    return [self stringByTrimmingTrailingCharactersInSet:
            [NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

그리고 당신은 그것을 다음과 같이 사용합니다 :

[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]

0

나는 기본적으로 Alex의 답변에서와 비슷하게 작동하는이 기능을 생각해 냈습니다.

-(NSString*)trimLastSpace:(NSString*)str{
    int i = str.length - 1;
    for (; i >= 0 && [str characterAtIndex:i] == ' '; i--);
    return [str substringToIndex:i + 1];
}

whitespaceCharacterSet공백 외에도 탭 문자가 포함되어있어 내 경우에는 나타나지 않습니다. 그래서 나는 평범한 비교만으로 충분하다고 생각합니다.


-1

let string = "테스트 된 문자열 테스트"

공백과 줄 바꾸기를 제거하려면 아래 코드를 사용하십시오.

let str_trimmed = yourString.trimmingCharacters (에서 : .whitespacesAndNewlines)

문자열에서 공백 만 제거하려면 아래 코드를 사용하십시오.

let str_trimmed = yourString.trimmingCharacters (에서 : .whitespaces)


-7
NSString* NSStringWithoutSpace(NSString* string)
{
    return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.