web-dev-qa-db-ja.com

NSStringの部分文字列を取得する方法は?

NSString @"value:hello World:value"から値を取得したい場合、何を使用すればよいですか?

必要な戻り値は@"hello World"です。

76
Csabi

オプション1:

NSString *haystack = @"value:hello World:value";
NSString *haystackPrefix = @"value:";
NSString *haystackSuffix = @":value";
NSRange needleRange = NSMakeRange(haystackPrefix.length,
                                  haystack.length - haystackPrefix.length - haystackSuffix.length);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle); // -> "hello World"

オプション2:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^value:(.+?):value$" options:0 error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:haystack options:NSAnchoredSearch range:NSMakeRange(0, haystack.length)];
NSRange needleRange = [match rangeAtIndex: 1];
NSString *needle = [haystack substringWithRange:needleRange];

しかし、これはあなたのかなり些細な場合には少し上かもしれません。

オプション3:

NSString *needle = [haystack componentsSeparatedByString:@":"][1];

これは、分割中に3つの一時的な文字列と配列を作成します。


すべてのスニペットは、検索対象が実際に文字列に含まれていることを前提としています。

156
Regexident

少し複雑ではない答えを次に示します。

NSString *myString = @"abcdefg";
NSString *mySmallerString = [myString substringToIndex:4];

SubstringWithRangeおよびsubstringFromIndexも参照してください

71
Shaun Neal

探していることを実行できる単純な関数を次に示します。

- (NSString *)getSubstring:(NSString *)value betweenString:(NSString *)separator
{
    NSRange firstInstance = [value rangeOfString:separator];
    NSRange secondInstance = [[value substringFromIndex:firstInstance.location + firstInstance.length] rangeOfString:separator];
    NSRange finalRange = NSMakeRange(firstInstance.location + separator.length, secondInstance.location);

    return [value substringWithRange:finalRange];
}

使用法:

NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"];
16
Garett

以下に、@ Regexidentオプション1と@Garettの回答の小さな組み合わせを示します。接頭辞と接尾辞の間の強力な文字列カッターを取得し、MORE ... ANDMORE単語を使用します。

NSString *haystack = @"MOREvalue:hello World:valueANDMORE";
NSString *prefix = @"value:";
NSString *suffix = @":value";
NSRange prefixRange = [haystack rangeOfString:prefix];
NSRange suffixRange = [[haystack substringFromIndex:prefixRange.location+prefixRange.length] rangeOfString:suffix];
NSRange needleRange = NSMakeRange(prefixRange.location+prefix.length, suffixRange.location);
NSString *needle = [haystack substringWithRange:needleRange];
NSLog(@"needle: %@", needle);
12
Jeffrey Neo

これも使う

NSString *ChkStr = [MyString substringWithRange:NSMakeRange(5, 26)];

注-NSMakeRange(start, end)NSMakeRange(start, end- start)でなければなりません。

12
Abhishek Mishra