1

私は次のようなurlStringを持っています:http://www.youtube.com/watch?v=5kdEhVtNFPo

私はそれをこれに変えることができるようにしたいと思います:http://www.youtube.com/v/5kdEhVtNFPo

どうすればいいですか?インスタンスメソッドを使用する必要があるのか​​、substringWithRange:それともsubstringFromIndex:

私はこれを試しましたが、最初の部分を削除し、ビデオIDを残すだけです(削除します) 。文字列の先頭http://www.youtube.com/watch?v=に追加する必要があります。http://www.youtube.com/v/

NSString *newUrlString = [urlString substringFromIndex:31];
4

4 に答える 4

9
NSString* newUrl = [oldUrl stringByReplacingOccurrencesOfString:@"watch?v=" withString:@"v/"];

これは、URL に文字列「watch?v=」のインスタンスがこれ以上含まれない場合にのみ機能することに注意してください。

于 2012-10-12T12:16:53.063 に答える
2

あなたが与える入力に対してより柔軟な別の方法を提案します:

- (NSString) newURLStringForOldURLString:(NSString *)oldURLString
{
    NSString *newURLString = nil;
    NSURL *url = [[NSURL alloc] initWithString:oldURLString];
    NSString *query = [url query]; /* v=5kdEhVtNFPo */
    NSArray *fieldValuePairs = [query componentsSeparatedByString:@"&"];
    for (NSString *pair in fieldValuePairs) {
        NSArray *components = [pair componentsSeparatedByString:@"="];
        NSString *field = [components objectAtIndex:0];
        NSString *value = [components objectAtIndex:1];
        if ([field isEqualToString:@"v"]) {
            newURLString = [NSString stringWithFormat:@"%@://%@:%@/%@/%@", [url scheme], [url domain], [url port], field, value];
            break;
        }
    }
    [url release];
    return newURLString;
}
于 2012-10-12T12:33:18.283 に答える
0

十分に柔軟にするために、次を使用できますNSRegularExpression

NSString *str = @"http://www.youtube.com/watch?v=5kdEhVtNFPo";
NSString *pattern = @"((?:http:\\/\\/){0,1}www\\.youtube\\.com\\/)watch\\?v=([:alnum:]+)";
NSString *template = @"$1v/$2";
NSRegularExpression *regexp = [NSRegularExpression 
          regularExpressionWithPattern:pattern 
                               options:NSRegularExpressionCaseInsensitive 
                                 error:nil];
NSString *newStr = [regexp stringByReplacingMatchesInString:str 
          options:0 range:NSMakeRange(0, [str length]) withTemplate:template];
NSLog(@"Replaced: %@", newStr);
于 2012-10-12T12:29:44.600 に答える
0

別の選択肢:

NSString *str3 = @"http://www.youtube.com/watch?v=5kdEhVtNFPo";
NSString *outputString;
NSRange range = [str3 rangeOfString:@"watch?v="];
if(range.location != NSNotFound)
{
    outputString = [str3 stringByReplacingCharactersInRange:range withString:@"v/"];
    NSLog(@"%@",outputString);

}
于 2012-10-12T12:26:01.997 に答える