Objective-C Language
NSString
खोज…
परिचय
NSString वर्ग स्ट्रिंग्स (वर्णों की श्रृंखला) के साथ काम करने के लिए फाउंडेशन फ्रेमवर्क का एक हिस्सा है। इसमें स्ट्रिंग्स की तुलना, खोज और संशोधन के तरीके भी शामिल हैं।
टिप्पणियों
NSStrings में विभिन्न प्रकार के ऑब्जेक्ट्स और डेटा-प्रकारों को नेस्ट करने के लिए देखें: Objective-C, Format Specifiers
सृष्टि
सरल:
NSString *newString = @"My String";
कई तार से:
NSString *stringOne = @"Hello";
NSString *stringTwo = @"world";
NSString *newString = [NSString stringWithFormat:@"My message: %@ %@",
stringOne, stringTwo];
म्यूटेबल स्ट्रिंग का उपयोग करना
NSString *stringOne = @"Hello";
NSString *stringTwo = @"World";
NSMutableString *mutableString = [NSMutableString new];
[mutableString appendString:stringOne];
[mutableString appendString:stringTwo];
NSData से:
NSData
से आरंभ करते समय, एक स्पष्ट एन्कोडिंग प्रदान की जानी चाहिए क्योंकि NSString
यह अनुमान लगाने में सक्षम नहीं है कि कच्ची भौतिक प्रवाह में वर्णों का प्रतिनिधित्व कैसे किया जाता है। आजकल सबसे आम एन्कोडिंग UTF-8 है, जो JSON जैसे कुछ डेटा के लिए भी आवश्यक है।
+[NSString stringWithUTF8String:]
का उपयोग करने से बचें क्योंकि यह स्पष्ट रूप से NULL- टर्मिनेटेड C- स्ट्रिंग की अपेक्षा करता है, जो -[NSData bytes]
प्रदान नहीं करता है।
NSString *newString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];
NSArray से:
NSArray *myArray = [NSArray arrayWithObjects:@"Apple", @"Banana", @"Strawberry", @"Kiwi", nil];
NSString *newString = [myArray componentsJoinedByString:@" "];
स्ट्रिंग लंबाई
वर्णों की संख्या प्राप्त करने के लिए NSString की length
संपत्ति है।
NSString *string = @"example";
NSUInteger length = string.length; // length equals 7
बंटवारे के उदाहरण के रूप में, ध्यान रखें कि वर्णों का प्रतिनिधित्व करने के लिए NSString
UTF-16 का उपयोग करता है। लंबाई वास्तव में केवल UTF-16 कोड इकाइयों की संख्या है। यह उस चीज़ से भिन्न हो सकता है जिसे उपयोगकर्ता पात्रों के रूप में मानता है।
यहाँ कुछ मामले हैं जो आश्चर्यचकित कर सकते हैं:
@"é".length == 1 // LATIN SMALL LETTER E WITH ACUTE (U+00E9)
@"é".length == 2 // LATIN SMALL LETTER E (U+0065) + COMBINING ACUTE ACCENT (U+0301)
@"❤️".length == 2 // HEAVY BLACK HEART (U+2764) + VARIATION SELECTOR-16 (U+FE0F)
@"🇮🇹".length == 4 // REGIONAL INDICATOR SYMBOL LETTER I (U+1F1EE) + REGIONAL INDICATOR SYMBOL LETTER T (U+1F1F9)
तकनीकी रूप से " ग्रैपहेम क्लस्टर्स " के रूप में जाने जाने वाले उपयोगकर्ता-कथित पात्रों की संख्या प्राप्त करने के लिए, आपको स्ट्रिंग पर -enumerateSubstringsInRange:options:usingBlock:
और एक काउंट रखना आवश्यक है। यह स्टैक ओवरफ्लो पर निकोलाई रुहे द्वारा एक उत्तर में प्रदर्शित किया गया है ।
केस बदलना
स्ट्रिंग को अपरकेस में बदलने के लिए, uppercaseString
उपयोग करें:
NSString *myString = @"Emphasize this";
NSLog(@"%@", [myString uppercaseString]; // @"EMPHASIZE THIS"
स्ट्रिंग को लोअरकेस में बदलने के लिए, lowercaseString
उपयोग करें:
NSString *myString = @"NORMALIZE this";
NSLog(@"%@", [myString lowercaseString]; // @"normalize this"
एक स्ट्रिंग में प्रत्येक शब्द के पहले अक्षर चरित्र भुनाने के लिए, का उपयोग capitalizedString
:
NSString *myString = @"firstname lastname";
NSLog(@"%@", [myString capitalizedString]); // @"Firstname Lastname"
तुलना स्ट्रिंग्स
तार का उपयोग कर समानता के लिए तुलना की जाती है isEqualToString:
==
ऑपरेटर केवल वस्तु पहचान के लिए परीक्षण करता है और वस्तुओं के तार्किक मूल्यों की तुलना नहीं करता है, इसलिए इसका उपयोग नहीं किया जा सकता है:
NSString *stringOne = @"example";
NSString *stringTwo = [stringOne mutableCopy];
BOOL objectsAreIdentical = (stringOne == stringTwo); // NO
BOOL stringsAreEqual = [stringOne isEqualToString:stringTwo]; // YES
अभिव्यक्ति (stringOne == stringTwo)
यह देखने के लिए परीक्षण करती है कि क्या दो तारों के मेमोरी पते समान हैं, जो आमतौर पर वह नहीं है जो हम चाहते हैं।
यदि स्ट्रिंग चर nil
हो सकते हैं तो आपको इस मामले में भी ध्यान रखना होगा:
BOOL equalValues = stringOne == stringTwo || [stringOne isEqualToString:stringTwo];
जब स्ट्रिंग के बराबर मान होते हैं या दोनों nil
होते हैं तो यह स्थिति YES
लौटाती है।
वर्णानुक्रम में दो तार ऑर्डर करने के लिए, compare
उपयोग compare
:।
NSComparisonResult result = [firstString compare:secondString];
NSComparisonResult
हो सकता है:
-
NSOrderedAscending
: पहला स्ट्रिंग दूसरे स्ट्रिंग से पहले आता है। -
NSOrderedSame
: तार बराबर हैं। -
NSOrderedDescending
: दूसरा स्ट्रिंग पहले स्ट्रिंग से पहले आता है।
दो तार समानता की तुलना करने के लिए, isEqualToString:
उपयोग करें isEqualToString:
BOOL result = [firstString isEqualToString:secondString];
खाली स्ट्रिंग ( @""
) के साथ तुलना करने के लिए, बेहतर length
उपयोग करें।
BOOL result = string.length == 0;
स्ट्रिंग्स के एक सरणी में शामिल होना
NSString
NSArray
को एक नए NSString
में संयोजित करने के लिए:
NSArray *yourWords = @[@"Objective-C", @"is", @"just", @"awesome"];
NSString *sentence = [yourWords componentsJoinedByString:@" "];
// Sentence is now: @"Objective-C is just awesome"
एन्कोडिंग और डिकोडिंग
// decode
NSString *string = [[NSString alloc] initWithData:utf8Data
encoding:NSUTF8StringEncoding];
// encode
NSData *utf8Data = [string dataUsingEncoding:NSUTF8StringEncoding];
कुछ समर्थित एनकोडिंग हैं:
-
NSASCIIStringEncoding
-
NSUTF8StringEncoding
-
NSUTF16StringEncoding
(==NSUnicodeStringEncoding
)
ध्यान दें कि utf8Data.bytes
में एक समाप्ति शून्य वर्ण शामिल नहीं है, जो C स्ट्रिंग्स के लिए आवश्यक है। यदि आपको C स्ट्रिंग की आवश्यकता है, तो UTF8String
उपयोग UTF8String
:
const char *cString = [string UTF8String];
printf("%s", cString);
विभाजन
आप एक स्ट्रिंग को भागों की एक सरणी में विभाजित कर सकते हैं, एक विभाजक चरित्र द्वारा विभाजित किया गया है ।
NSString * yourString = @"Stack,Exchange,Network";
NSArray * yourWords = [yourString componentsSeparatedByString:@","];
// Output: @[@"Stack", @"Exchange", @"Network"]
यदि आपको कई अलग-अलग सीमों के सेट पर विभाजित करने की आवश्यकता है, तो उपयोग करें -[NSString componentsSeparatedByCharactersInSet:]
।
NSString * yourString = @"Stack Overflow+Documentation/Objective-C";
NSArray * yourWords = [yourString componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"+/"]];
// Output: @[@"Stack Overflow", @"Documentation", @"Objective-C"]`
यदि आपको अपने व्यक्तिगत वर्णों में एक स्ट्रिंग को तोड़ने की आवश्यकता है, तो स्ट्रिंग की लंबाई पर लूप करें और प्रत्येक वर्ण को एक नए स्ट्रिंग में परिवर्तित करें।
NSMutableArray * characters = [[NSMutableArray alloc] initWithCapacity:[yourString length]];
for (int i = 0; i < [myString length]; i++) {
[characters addObject: [NSString stringWithFormat:@"%C",
[yourString characterAtIndex:i]];
}
लंबाई उदाहरण के रूप में, ध्यान रखें कि यहां "वर्ण" एक UTF-16 कोड इकाई है, जरूरी नहीं कि उपयोगकर्ता एक चरित्र के रूप में क्या देखता है। यदि आप इस लूप का उपयोग @"🇮🇹"
, तो आप देखेंगे कि यह चार टुकड़ों में विभाजित है।
उपयोगकर्ता-कथित वर्णों की सूची प्राप्त करने के लिए, -enumerateSubstringsInRange:options:usingBlock:
उपयोग -enumerateSubstringsInRange:options:usingBlock:
।
NSMutableArray * characters = [NSMutableArray array];
[yourString enumerateSubstringsInRange:(NSRange){0, [yourString length]}
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString * substring, NSRange r, NSRange s, BOOL * b){
[characters addObject:substring];
}];
यह एक एकल विकल्प के रूप में इतालवी ध्वज की तरह अंगूर के समूहों को संरक्षित करता है।
एक विकल्प के लिए खोज
खोज करने के लिए कि स्ट्रिंग में एक विकल्प है, निम्नलिखित करें:
NSString *myString = @"This is for checking substrings";
NSString *subString = @"checking";
BOOL doesContainSubstring = [myString containsString:subString]; // YES
यदि iOS 7 या OS X 10.9 (या इससे पहले) को लक्षित किया जा रहा है:
BOOL doesContainSubstring = ([myString rangeOfString:subString].location != NSNotFound); // YES
सी स्ट्रिंग्स के साथ काम करना
NSString
को const char
उपयोग में बदलने के लिए -[NSString UTF8String]
:
NSString *myNSString = @"Some string";
const char *cString = [myNSString UTF8String];
आप उपयोग भी कर सकते हैं -[NSString cStringUsingEncoding:]
यदि आपका स्ट्रिंग UTF-8 के अलावा किसी अन्य चीज़ से एन्कोडेड है।
रिवर्स पाथ -[NSString stringWithUTF8String:]
लिए -[NSString stringWithUTF8String:]
:
const *char cString = "Some string";
NSString *myNSString = [NSString stringWithUTF8String:cString];
myNSString = @(cString); // Equivalent to the above.
एक बार जब आप है const char *
, आप की एक सरणी की तरह ही इसके साथ काम कर सकते हैं chars
:
printf("%c\n", cString[5]);
यदि आप स्ट्रिंग को संशोधित करना चाहते हैं, तो एक प्रतिलिपि बनाएँ:
char *cpy = calloc(strlen(cString)+1, 1);
strncpy(cpy, cString, strlen(cString));
// Do stuff with cpy
free(cpy);
प्रमुख और अनुगामी व्हॉट्सएप को हटाना
NSString *someString = @" Objective-C Language \n";
NSString *trimmedString = [someString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
//Output will be - "Objective-C Language"
विधि stringByTrimmingCharactersInSet दिए गए वर्ण सेट में शामिल स्ट्रिंग वर्णों के दोनों सिरों को निकालकर बनाई गई एक नई स्ट्रिंग देता है।
हम केवल व्हाट्सएप या न्यूलाइन को भी हटा सकते हैं
// Removing only WhiteSpace
NSString *trimmedWhiteSpace = [someString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//Output will be - "Objective-C Language \n"
// Removing only NewLine
NSString *trimmedNewLine = [someString stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
//Output will be - " Objective-C Language "
का प्रारूपण
NSString
स्वरूपण printf
ANSI-C फ़ंक्शन पर उपलब्ध सभी प्रारूप स्ट्रिंग का समर्थन करता है। भाषा का एकमात्र जोड़ %@
प्रतीक है जिसका उपयोग सभी उद्देश्य-सी वस्तुओं को प्रारूपित करने के लिए किया जाता है।
पूर्णांकों को प्रारूपित करना संभव है
int myAge = 21;
NSString *formattedAge = [NSString stringWithFormat:@"I am %d years old", my_age];
या किसी भी वस्तु NSObject से उपवर्गित
NSDate *now = [NSDate date];
NSString *formattedDate = [NSString stringWithFormat:@"The time right now is: %@", now];
प्रारूप विनिर्देशक की पूरी सूची के लिए, कृपया देखें: उद्देश्य-सी, प्रारूप विनिर्देशक, सिंटैक्स
एनएसएसट्रिंग ऑब्जेक्टिव-सी को उलट देना
// myString is "hi"
NSMutableString *reversedString = [NSMutableString string];
NSInteger charIndex = [myString length];
while (charIndex > 0) {
charIndex--;
NSRange subStrRange = NSMakeRange(charIndex, 1);
[reversedString appendString:[myString substringWithRange:subStrRange]];
}
NSLog(@"%@", reversedString); // outputs "ih"