2011-01-06 2 views
2

У меня есть небольшая проблема с NSRange, или, может быть, это просто неправильный комманд, который я использую.Проблема с NSRange в Objective-C?

Вот что я хочу сделать. У меня есть строка, как это:

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

Как вы можете видеть, что всегда есть команда со значением и разделённых «/». Теперь я хочу написать mthod, который дает мне определенное значение для команды, например. c2, который будет зеленым.

Сначала я хотел бы получить позицию c2:

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

Теперь мне нужно, чтобы найти положение «/» с смещением «beginIndex».

И вот где я не знаю, как это сделать.

Справка приветствуется. Спасибо

ответ

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) 
3

Как насчет того, чтобы сначала разбивать строку на массив, используя метод componentsSeparatedByString:NSString?

0

Посмотрите на NSString ссылки и я думаю, что вам нужно:

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

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 
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]; 
    } 
}