Cắt khoảng trắng từ cuối NSString


Câu trả lời:


900

Lấy từ câu trả lời này tại đây: https://stackoverflow.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
Để bao gồm các dòng mới trong bộ ký tự, sử dụng whitespaceAndNewlineCharacterSet.
penprint

9
Chỉ cần lưu ý một chút: phương pháp này loại bỏ khoảng trắng từ cả hai đầu. Nó không loại bỏ khoảng trắng từ bên trong chuỗi.
Alex

10
Tôi không hiểu làm thế nào mà không trả lời câu hỏi lại nhận được nhiều sự ủng hộ như vậy. Giải pháp của bạn cũng loại bỏ khoảng trắng ở đầu chuỗi và đó không phải là yêu cầu.
James Boutcher

4
@JamesBoutcher lý do khiến nó nhận được rất nhiều sự ủng hộ là vì chúng tôi đã đến đây để tìm kiếm "trim NSString" trong Google và đây là câu trả lời đúng cho câu hỏi đó. Đúng là OP đã yêu cầu một cái gì đó khác.
Dan Rosenstark

20

Một giải pháp khác liên quan đến việc tạo chuỗi đột biến:

//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

Bạn đi đây ...

- (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)];
}

Vì vậy, bây giờ chỉ cần gọi nó. Giả sử bạn có một chuỗi có khoảng trắng ở mặt trước và khoảng trắng ở cuối và bạn chỉ muốn xóa khoảng trắng ở cuối, bạn có thể gọi nó như thế này:

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

resultString sau đó sẽ không có khoảng trống ở cuối


8

Để xóa khoảng trắng từ đầu và cuối chuỗi trong Swift:

Swift 3

string.trimmingCharacters(in: .whitespacesAndNewlines)

Các phiên bản Swift trước

string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))

1
Đây không phải là sẽ cắt TẤT CẢ các khoảng trắng và ký tự dòng mới sao? câu hỏi hỏi làm thế nào để cắt từ cuối.
Giorgos Ath

@GiorgosAth Không, điều này sẽ chỉ cắt bớt các ký tự từ đầu hoặc cuối chuỗi. Từ tài liệu apple cho stringByTrimmigCharactersInSet:- "Trả về một chuỗi mới được tạo bằng cách xóa khỏi cả hai đầu của các ký tự người nhận có trong một bộ ký tự đã cho." developer.apple.com/reference/foundation/nsopes/ '
mấtAtSeaJoshua

@GiorgosAth cũng đây là mã chính xác giống như câu trả lời được chấp nhận chỉ trong Swift.
mấtAtSeaJoshua

Câu hỏi là về việc loại bỏ từ cuối. Câu trả lời này loại bỏ từ đầu và cuối. Do đó đây không phải là một câu trả lời hợp lệ.
Patrick

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

Có rất nhiều nhân vật khác. Kiểm tra nó theo yêu cầu của bạn.


1
Đây không phải là sẽ cắt TẤT CẢ các khoảng trắng và ký tự dòng mới sao? câu hỏi hỏi làm thế nào để cắt từ cuối.
Giorgos Ath

@ giorgos-ath - Có, nó sẽ xóa khoảng trắng từ cuối
g212ss

Câu hỏi là về việc loại bỏ từ cuối. Câu trả lời này loại bỏ từ đầu và cuối. Do đó đây không phải là một câu trả lời hợp lệ.
Patrick

4

Phiên bản Swift

Chỉ cắt các khoảng trắng ở cuối Chuỗi:

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))))
}

Cắt các khoảng trắng ở cả hai phía của Chuỗi:

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

1
Câu hỏi là về cắt tỉa không gian vào cuối. Mã của bạn cắt cả hai bên.
JakubKnejzlik

Mã này không biên dịch. Các phương thức CountElements () và Advance () không được xác định.
petrsyn

4

Điều này sẽ chỉ loại bỏ các ký tự dấu của sự lựa chọn của bạn.

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

Trong Swift

Để cắt không gian & dòng mới từ cả hai phía của Chuỗi:

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

3

Một giải pháp đơn giản để chỉ cắt một đầu thay vì cả hai đầu trong 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

Và một tiện ích đối xứng để cắt tỉa chỉ bắt đầu:

@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

Để cắt tất cả các ký tự khoảng trắng ở cuối (tôi đoán đó thực sự là ý định của bạn), sau đây là một cách khá gọn gàng và ngắn gọn để thực hiện.

Swift 5:

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

Mục tiêu-C:

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

Một dòng, với một chút regex.


1

Giải pháp được mô tả ở đây: Làm cách nào để xóa khoảng trắng khỏi đầu bên phải của NSString?

Thêm các danh mục sau vào 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]];
}

Và bạn sử dụng nó như vậy:

[yourNSString stringByTrimmingTrailingWhitespaceAndNewlineCharacters]

0

Tôi đã đưa ra chức năng này, về cơ bản hoạt động tương tự như trong câu trả lời của Alex:

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

whitespaceCharacterSetngoài không gian, bản thân nó cũng bao gồm ký tự tab, trong trường hợp của tôi không thể xuất hiện. Vì vậy, tôi đoán một so sánh đơn giản có thể đủ.


-1

hãy để chuỗi = "Kiểm tra chuỗi đã cắt"

Để xóa khoảng trắng và dòng mới, hãy sử dụng mã bên dưới: -

hãy để str_trimmed = yourString.trimmingChar character (in: .whitespacesAndNewlines)

Để chỉ xóa Không gian khỏi chuỗi, hãy sử dụng mã bên dưới: -

hãy để str_trimmed = yourString.trimmingChar character (in: .whitespaces)


-7
NSString* NSStringWithoutSpace(NSString* string)
{
    return [string stringByReplacingOccurrencesOfString:@" " withString:@""];
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.