次のような形式の NSString データがあります。
10mm x 1000mm
4mm x 20mm
50mm x 200mm
250mm x 2000mm
誰かがそれぞれの場合に2つの別々の数字を抽出する方法を教えてもらえますか?
10 と 1000
4 と 20
50 と 200
250 と 2000
等々。
興味深いことに、10mm のような文字列がある場合、intValue を使用してそこから 10 を抽出できます。したがって、あなたが望むことを行う別の方法は次のとおりです。
NSString *s = @"10mm x 1000mm";
NSArray *arr = [s componentsSeparatedByString:@"x"];
int firstNum = [arr[0] intValue];
int secondNum = [arr[1] intValue];
NSLog(@"%d %d",firstNum,secondNum);
フォーマットが本当に、常に
number, "mm x ", number, "mm"
次に、使用できますNSScanner
:
- (void)parseString:(NSString *)str sizeX:(int *)x sizeY:(int *)y
{
NSScanner *scn = [NSScanner scannerWithString:str];
[scn scanInt:x];
[scn scanString:@"mm x " intoString:NULL];
[scn scanInt:y];
}
次のように使用します。
NSString *s = @"50mm x 200mm";
int x, y;
[self parseString:s sizeX:&x sizeY:&y];
NSLog(@"X size: %d, Y size: %d", x, y);
より堅牢なものが必要な場合は、正規表現を試すことができます。
NSString * input = @"55 mm x 100mm" ;
NSRegularExpression * regex = [ NSRegularExpression regularExpressionWithPattern:@"([0-9]+).*x.*([0-9]+)" options:NSRegularExpressionCaseInsensitive error:NULL ] ;
NSArray * matches = [ regex matchesInString:input options:0 range:(NSRange){ .length = input.length } ] ;
NSTextCheckingResult * match = matches[0] ;
NSInteger width ;
{
NSRange range = [ match rangeAtIndex:1 ] ;
width = [[ input substringWithRange:range ] integerValue ] ;
}
NSInteger height ;
{
NSRange range = [ match rangeAtIndex:2 ] ;
height = [[ input substringWithRange:range ] integerValue ] ;
}