উত্তর:
নেটিভ ব্যবহার করুন regexp সমাধান hfossli দ্বারা উপলব্ধ।
হয় আপনার পছন্দসই regexp লাইব্রেরি ব্যবহার করুন বা নিম্নলিখিত কোকো-নেটিভ সমাধান ব্যবহার করুন:
NSString *theString = @" Hello this is a long string! ";
NSCharacterSet *whitespaces = [NSCharacterSet whitespaceCharacterSet];
NSPredicate *noEmptyStrings = [NSPredicate predicateWithFormat:@"SELF != ''"];
NSArray *parts = [theString componentsSeparatedByCharactersInSet:whitespaces];
NSArray *filteredArray = [parts filteredArrayUsingPredicate:noEmptyStrings];
theString = [filteredArray componentsJoinedByString:@" "];
রেজেক্স এবং এনএসচার্যাক্টসেট আপনাকে সহায়তা করার জন্য এখানে রয়েছে। এই সমাধানটি শ্বেত স্পেসের পাশাপাশি একাধিক শ্বেত স্পেস ছাঁটাই করে।
NSString *original = @" Hello this is a long string! ";
NSString *squashed = [original stringByReplacingOccurrencesOfString:@"[ ]+"
withString:@" "
options:NSRegularExpressionSearch
range:NSMakeRange(0, original.length)];
NSString *final = [squashed stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
লগিং final
দেয়
"Hello this is a long string!"
সম্ভাব্য বিকল্প রেজেক্স প্যাটার্ন:
[ ]+
[ \\t]+
\\s+
এক্সটেনশনের সহজতা, পারফরম্যান্স, কোডের সংখ্যা লাইন এবং তৈরি করা সামগ্রীর সংখ্যা এই সমাধানটিকে উপযুক্ত করে তোলে।
stringByReplacingOccurrencesOfString:
। বিশ্বাস করতে পারি না আমি তা জানতাম না।
আসলে, এর খুব সহজ সমাধান রয়েছে:
NSString *string = @" spaces in front and at the end ";
NSString *trimmedString = [string stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(@"%@", trimmedString)
( উত্স )
একটি রেজেক্স সহ, তবে কোনও বাহ্যিক কাঠামোর প্রয়োজন ছাড়াই:
NSString *theString = @" Hello this is a long string! ";
theString = [theString stringByReplacingOccurrencesOfString:@" +" withString:@" "
options:NSRegularExpressionSearch
range:NSMakeRange(0, theString.length)];
NSRegularExpressionSearch
বলে যে এটি কেবল rangeOfString:...
পদ্ধতিগুলির
একটি ওয়ান লাইন সমাধান:
NSString *whitespaceString = @" String with whitespaces ";
NSString *trimmedString = [whitespaceString
stringByReplacingOccurrencesOfString:@" " withString:@""];
এটি করা উচিত ...
NSString *s = @"this is a string with lots of white space";
NSArray *comps = [s componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSMutableArray *words = [NSMutableArray array];
for(NSString *comp in comps) {
if([comp length] > 1)) {
[words addObject:comp];
}
}
NSString *result = [words componentsJoinedByString:@" "];
রেজেক্সের জন্য আরেকটি বিকল্প হ'ল রেগেক্সিটিটাইট , যা আইফোন প্রকল্পে এম্বেড করা খুব সহজ:
[theString stringByReplacingOccurencesOfRegex:@" +" withString:@" "];
এখানে একটি থেকে একটি স্নিপেট এর NSString
এক্সটেনশন, যেখানে "self"
হয় NSString
উদাহরণস্বরূপ। এটি দুটি আর্গুমেন্টে [NSCharacterSet whitespaceAndNewlineCharacterSet]
এবং প্রবেশের মাধ্যমে একক স্পেসে সংকীর্ণ শ্বেত স্থানটি ধসে পড়তে ব্যবহৃত হতে ' '
পারে।
- (NSString *) stringCollapsingCharacterSet: (NSCharacterSet *) characterSet toCharacter: (unichar) ch {
int fullLength = [self length];
int length = 0;
unichar *newString = malloc(sizeof(unichar) * (fullLength + 1));
BOOL isInCharset = NO;
for (int i = 0; i < fullLength; i++) {
unichar thisChar = [self characterAtIndex: i];
if ([characterSet characterIsMember: thisChar]) {
isInCharset = YES;
}
else {
if (isInCharset) {
newString[length++] = ch;
}
newString[length++] = thisChar;
isInCharset = NO;
}
}
newString[length] = '\0';
NSString *result = [NSString stringWithCharacters: newString length: length];
free(newString);
return result;
}
বিকল্প সমাধান: নিজেকে ওগ্রেকিটের একটি অনুলিপি (কোকো নিয়মিত এক্সপ্রেশন লাইব্রেরি) পান।
পুরো ফাংশনটি তখন:
NSString *theStringTrimmed =
[theString stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];
OGRegularExpression *regex =
[OGRegularExpression regularExpressionWithString:@"\s+"];
return [regex replaceAllMatchesInString:theStringTrimmed withString:@" "]);
স্বল্প ও মধুর.
আপনি যদি দ্রুততম সমাধানের পরে থাকেন তবে একটি সাবধানে নির্ধারিত নির্দেশাবলী ব্যবহার করে সিরিজটি NSScanner
সম্ভবত সবচেয়ে ভাল কাজ করবে তবে আপনি কেবলমাত্র বিশাল (অনেক মেগাবাইট) ব্লকের পাঠ্যের ব্লক প্রক্রিয়া করার পরিকল্পনা করলে তা কেবল প্রয়োজন হবে।
@ ম্যাথিউ গডার্টের মতে সেরা উত্তর, তবে কিছু লাইন অনুপস্থিত, সমস্ত উত্তর কেবলমাত্র শব্দের মধ্যে স্থান হ্রাস করে, তবে যখন ট্যাবগুলি থাকে বা স্থানের জায়গাতে ট্যাব থাকে, যেমন: "এটি পাঠ্য \ t, এবং between tt এর মধ্যে রয়েছে, সুতরাং "তিনটি লাইন কোডে আমরা করব: স্ট্রিংটি আমরা সাদা স্পেস হ্রাস করতে চাই
NSString * str_aLine = @" this is text \t , and\tTab between , so on ";
// replace tabs to space
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@"\t" withString:@" "];
// reduce spaces to one space
str_aLine = [str_aLine stringByReplacingOccurrencesOfString:@" +" withString:@" "
options:NSRegularExpressionSearch
range:NSMakeRange(0, str_aLine.length)];
// trim begin and end from white spaces
str_aLine = [str_aLine stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
ফলাফল হলো
"this is text , and Tab between , so on"
ট্যাব প্রতিস্থাপন না করে রেজুল হ'ল:
"this is text , and Tab between , so on"
আপনি একটি সহজ সময় যুক্তিও ব্যবহার করতে পারেন। সেখানে কোনও রেগেক্স যাদু নেই, তাই সম্ভবত এটি ভবিষ্যতে বোঝা এবং পরিবর্তন করা আরও সহজ is
while([yourNSStringObject replaceOccurrencesOfString:@" "
withString:@" "
options:0
range:NSMakeRange(0, [yourNSStringObject length])] > 0);
প্রয়োজনীয়তার উপর নির্ভর করে দুটি নিয়মিত এক্সপ্রেশন অনুসরণ করা কাজ করবে
তারপরে stringByReplacingOccurrencesOfString:withString:options:range:
একটি সাদা স্থানের সাথে তাদের প্রতিস্থাপন করতে এনএসআরটিংয়ের উদাহরণ পদ্ধতি প্রয়োগ করুন।
যেমন
[string stringByReplacingOccurrencesOfString:regex withString:@" " options:NSRegularExpressionSearch range:NSMakeRange(0, [string length])];
দ্রষ্টব্য: আমি উপরের কার্যকারিতা আইওএস 5.x এবং এর জন্য 'রেজেক্সকিটলাইট' লাইব্রেরি ব্যবহার করিনি।