わかりました、文字列「hello my name is donald
」 があるとしましょう
今、私は「 hello
」から「」まですべてを削除したいと思います。is
my name
his son
したがって、基本的には、単に実行stringByReplacingOccurrencesOfString
するだけでは機能しません。
(私はRegexLiteを持っています)
どうすればいいですか?
以下のように使用すると、
NSString *hello = @"his is name is isName";
NSRange rangeSpace = [hello rangeOfString:@" "
options:NSBackwardsSearch];
NSRange isRange = [hello rangeOfString:@"is"
options:NSBackwardsSearch
range:NSMakeRange(0, rangeSpace.location)];
NSString *finalResult = [NSString stringWithFormat:@"%@ %@",[hello substringToIndex:[hello rangeOfString:@" "].location],[hello substringFromIndex:isRange.location]];
NSLog(@"finalResult----%@",finalResult);
次のNSStringカテゴリが役立つ場合があります。それは私にとってはうまくいきますが、私が作成したものではありません。著者に感謝します。
NSString + Whitespace.h
#import <Foundation/Foundation.h>
@interface NSString (Whitespace)
- (NSString *)stringByCompressingWhitespaceTo:(NSString *)seperator;
@end
NSString + Whitespace.m
#
import "NSString+Whitespace.h"
@implementation NSString (Whitespace)
- (NSString *)stringByCompressingWhitespaceTo:(NSString *)seperator
{
//NSArray *comps = [self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSArray *comps = [self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSMutableArray *nonemptyComps = [[NSMutableArray alloc] init];
// only copy non-empty entries
for (NSString *oneComp in comps)
{
if (![oneComp isEqualToString:@""])
{
[nonemptyComps addObject:oneComp];
}
}
return [nonemptyComps componentsJoinedByString:seperator]; // already marked as autoreleased
}
@end
文字列が「こんにちは私の名前は」で始まることが常にわかっている場合は、最後のスペースを含めて17文字になります。したがって、
NSString * hello = "hello my name is Donald Trump";
NSString * finalNameOnly = [hello substringFromIndex:17];