2

NSRange に少し問題があるか、使用しているコマンドが間違っているだけかもしれません。

これが私がやりたいことです。私はこのような文字列を持っています:

NSString *mystring = @"/c1blue/c2green/c3yellow/"

ご覧のとおり、値を含むコマンドと「/」で区切られたコマンドが常に存在します。ここで、コマンドに特定の値を与えるメソッドを書きたいと思います。たとえば、c2 は緑色になります。

まず、 c2 の位置を取得します。

int beginIndex = [mystring rangeOfString:@"c2"].location;

ここで、「beginIndex」のオフセットで「/」の位置を見つける必要があります。

そして、それは私が方法がわからないところです。

助けていただければ幸いです。ありがとう

4

5 に答える 5

3

componentsSeparatedByString:の方法を使用して、最初に文字列を配列に分割するのはどうNSStringですか?

于 2011-01-06T15:11:33.747 に答える
2

これはどう:

NSString *mystring = @"/c1blue/c2green/c3yellow/";
NSMutableDictionary *commands=[NSMutableDictionary dictionary];
for (NSString *component in [mystring componentsSeparatedByString:@"/"])
{
    // assuming your identifier is always 2 characters...
    if ([component length]>2) {
        [commands setObject:[component substringFromIndex:2] forKey:[component substringToIndex:2]];
    }
}
NSLog(@"commands %@", commands);
NSLog(@"command c2: %@", [commands objectForKey:@"c2"]);

結果:

2011-01-06 15:21:27.117 so[3741:a0f] commands {
    c1 = blue;
    c2 = green;
    c3 = yellow;
}
2011-01-06 15:25:26.488 so[3801:a0f] command c2: green
于 2011-01-06T15:17:00.710 に答える
1

別のアプローチ:

NSString *getCommand(NSString *string, NSString *identifier)
{
    for (NSString *component in [string componentsSeparatedByString:@"/"])
    {
        NSRange range=[component rangeOfString:identifier];
        if (range.location==0) {
            return [component substringFromIndex:range.length];
        }
    }
    return nil;
}

テストコード:

NSString *mystring = @"/c1blue/c2green/c3yellow/";
NSLog(@"%@", getCommand(mystring, @"c2"));
NSLog(@"%@", getCommand(mystring, @"c3"));
NSLog(@"%@", getCommand(mystring, @"c4"));  

結果:

2011-01-06 15:31:13.706 so[3949:a0f] green
2011-01-06 15:31:13.711 so[3949:a0f] yellow
2011-01-06 15:31:13.712 so[3949:a0f] (null)
于 2011-01-06T15:32:50.123 に答える
0

NSStringリファレンスを見てください。必要なものは次のとおりです。

- (NSArray *)componentsSeparatedByString:(NSString *)separator

于 2011-01-06T15:15:17.257 に答える
0

ありがとう、

私は実際にこれを思いつきましたが、提案されたものよりも複雑に見えます:

- (NSString *) CommSubStr:(NSString *) commandString withPattern:(NSString *) command
{
    int beginIndex = [commandString rangeOfString:command].location;
    if (beginIndex == -1)
    {
       return @"";
    } else
    {
        NSRange subStringRange = NSMakeRange(beginIndex + [command length], [commandString length]-(beginIndex+[command length]));
        NSString *newString = [commandString substringWithRange:subStringRange];

        int endIndex = [newString rangeOfString:@"/"].location;
        NSRange finalSubStringRange = NSMakeRange(0, endIndex);

        return [newString substringWithRange:finalSubStringRange];
    }
}
于 2011-01-06T15:55:38.097 に答える