0

次のような文字列を指定します。

http://files.domain.com/8aa55fc4-3015-400e-80f5-390997b43cf9/c07cb0d2-b7d7-4bfd-b0c3-6f43571e3c29-MyFile.jpg

「MyFile」という文字列を見つけて、その画像の種類 (.jpg または .png) を指定するだけです。どうすればこれを達成できますか?

私が思いつく唯一の方法は、最初の 4 文字を逆方向に検索してファイル拡張子を取得し、最初のハイフンが見つかるまで逆方向に検索し続け、ファイル名自体にハイフンがないと仮定することです。しかし、私はそれを行う方法がわかりません。より良い方法はありますか?

4

3 に答える 3

3

NSRegularExpressionファイル名を検索するために使用します。検索パターンは、実際にはファイル名について知っていることによって異なります。MyFileの前の「乱数」と文字が既知の形式である場合は、それを考慮に入れることができます。以下の私の提案は、ファイル名にマイナス記号が含まれていないことを前提としています。

NSRegularExpression *regex = [NSRegularExpression 
                     regularExpressionWithPattern:@"-([:alnum:]*)\\.(jpg|png)$"
                                          options:NSRegularExpressionSearch
                                            error:nil];
// Get the match between the first brackets.
NSTextCheckingResult *match = [regex firstMatchInString:string options:0 
                                         range:NSMakeRange(0, [string length])];
NSRange matchRange = [match rangeAtIndex:1];
NSString *fileName = [string substringWithRange:matchRange];
NSLog(@"Filename: %@", fileName);

// Get the extension with a simple NSString method.
NSString *extension = [string pathExtension];
NSLog(@"Extension: %@", extension);
于 2012-09-12T19:26:32.143 に答える
2

[myString lastPathComponent]ファイル名を取得します。 [myString pathExtension]拡張子を取得します。

ファイル名のサフィックスを取得するには、独自の解析を行う必要があると思います。最後のダッシュの後、拡張子の前の文字列は常にですか?

もしそうなら、ここにアイデアがあります:

- (NSString *)lastLittleBitOfTheFilenameFrom:(NSString *)filename {

    NSInteger fnStart = [filename rangeOfString:@"-" options:NSBackwardsSearch].location + 1;
    NSInteger fnEnd = [filename rangeOfString:@"." options:NSBackwardsSearch].location;

    // might need some error checks here depending on what you expect in the original url
    NSInteger length = fnEnd - fnStart;

    return [filename substringWithRange:NSMakeRange(fnStart, length)];
}

または、@Chuck のおかげで ...

// even more sensitive to unexpected input, but nice and tiny ...

- (NSString *)lastLittleBitOfTheFilenameFrom:(NSString *)filename {
    NSString *nameExt = [[filename componentsSeparatedByString:@"-"] lastObject];
    return [[nameExt componentsSeparatedByString:@"."] objectAtIndex:0];
}
于 2012-09-12T19:21:33.133 に答える
0

NSString オブジェクトに文字列がある場合、またはその文字列から文字列を作成する場合は、 rangeOfString メソッドを使用して両方を完成させることができます。

詳細については、 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.htmlを参照してください。

于 2012-09-12T19:22:00.227 に答える