NSString के अंत से रिक्त स्थान ट्रिम करें


367

मुझे एक स्ट्रिंग के अंत से रिक्त स्थान निकालने की आवश्यकता है। मैं उसे कैसे कर सकता हूँ? उदाहरण: यदि स्ट्रिंग है तो "Hello "यह बन जाना चाहिए"Hello"


1
इसका एक स्विफ्ट संस्करण है। stackoverflow.com/questions/26797739/…
tounaobun

जवाबों:


900

इस उत्तर से यहां लिया गया: 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
वर्णों के सेट में नई सूची शामिल करने के लिए, उपयोग करें whitespaceAndNewlineCharacterSet
पेनफॉल्ड

9
बस थोड़ा ध्यान दें: यह विधि दोनों सिरों से सफेद रिक्त स्थान को हटा देती है। यह स्ट्रिंग के अंदर से सफेद रिक्त स्थान को नहीं हटाता है।
एलेक्स

10
मुझे समझ में नहीं आ रहा है कि सवाल का जवाब कैसे नहीं दिया जाता है ताकि बहुत सारे उत्थान हों। आपका समाधान स्ट्रिंग की शुरुआत में ही व्हाट्सएप को हटा देता है, और यही नहीं पूछा गया था।
जेम्स बाउचर

4
@JamesBoutcher का कारण है कि इसे बहुत सारे अपवोट्स मिलते हैं, इसलिए हमें यहाँ Google में "ट्रिम NSString" की तलाश है और यह उस प्रश्न का सही उत्तर है। यह सच है कि ओपी ने कुछ और मांगा।
डैन रोसेनस्टार्क

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

स्विफ्ट में केवल एक स्ट्रिंग की शुरुआत और अंत से व्हाट्सएप को हटाने के लिए:

स्विफ्ट 3

string.trimmingCharacters(in: .whitespacesAndNewlines)

पिछले स्विफ्ट संस्करण

string.stringByTrimmingCharactersInSet(.whitespaceAndNewlineCharacterSet()))

1
क्या यह सभी व्हाट्सएप और न्यूलाइन वर्णों को ट्रिम करने वाला नहीं है? सवाल पूछता है कि अंत से ट्रिम कैसे किया जाए।
जियोर्गास एथ

@GiorgosAth नहीं यह केवल स्ट्रिंग की शुरुआत या अंत से पात्रों को ट्रिम करने वाला है। के लिए ऐप्पल डॉक्यूमेंटेशन से stringByTrimmigCharactersInSet:- "किसी दिए गए वर्ण सेट में निहित रिसीवर वर्णों के दोनों सिरों को हटाकर बनाई गई एक नई स्ट्रिंग देता है।" developer.apple.com/reference/foundation/nsstring/…
खो दिया गयाआसोशूश

@GiorgosAth भी स्विफ्ट में स्वीकृत उत्तर के समान ही सटीक कोड है।
खोयाअतोशोशू

सवाल अंत से हटाने के बारे में था। यह उत्तर शुरुआत और अंत से हटाता है। इसलिए यह मान्य उत्तर नहीं है।
पैट्रिक

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
क्या यह सभी व्हाट्सएप और न्यूलाइन वर्णों को ट्रिम करने वाला नहीं है? सवाल पूछता है कि अंत से ट्रिम कैसे किया जाए।
एथ

@ जियोर्गास-एथलीट - हां, यह अंत से सफेद स्थान को हटा देता है
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 () और अग्रिम () परिभाषित नहीं हैं।
पेट्र्सिन

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

उद्देश्य-सी में दोनों सिरों के बजाय केवल एक छोर को ट्रिम करने का एक सरल समाधान:

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

उद्देश्य सी:

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

एक लाइन, रेगेक्स के डैश के साथ।


1

समाधान यहां वर्णित है: एनएसएसटीरिंग के दाहिने छोर से व्हाट्सएप कैसे निकालें?

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

मैं इस फ़ंक्शन के साथ आया था, जो मूल रूप से एलेक्स द्वारा जवाब में एक के समान व्यवहार करता है:

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

whitespaceCharacterSetअंतरिक्ष के अलावा इसमें टैब वर्ण भी शामिल है, जो मेरे मामले में प्रकट नहीं हो सका। तो मुझे लगता है कि एक सादा तुलना पर्याप्त हो सकती है।


-1

स्ट्रिंग = "टेस्ट ट्रिम किए गए स्ट्रिंग"

कोड के नीचे सफेद स्थान और नई लाइन के उपयोग को हटाने के लिए: -

चलो str_trimmed = yourString.trimmingCharacters (में: .whitespacesAndNewlines)

नीचे दिए गए स्ट्रिंग उपयोग से केवल रिक्त स्थान हटाने के लिए: -

let__trimmed = yourString.trimmingCharacters (में: .whitespaces)


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.