Как объединить пути (NSString) в xcode? - PullRequest
0 голосов
/ 31 августа 2011

Представьте, что у вас есть два пути.

http://myserver.com/path1/path2 + /path1/path2/cache/image1.jpg = http://myserver.com/path1/path2/cache/image1.jpg

Обе строки пути могут иметь больше или меньше компонентов пути.

Итак, я спрашиваю, как найти равную часть в строках и затем удалить эту часть из одной из строк?

Ответы [ 3 ]

1 голос
/ 31 августа 2011

Вы не представляете, действительно ли равные части равны или нет.Нередко, например, такие пути, как ... / part1 / part1 / part1 /...

Для механики работы с путями у NSString есть несколько хороших методов - lastPathComponent, stringByAppendindPathComponent, pathComponents, pathWithComponents и т. д.

0 голосов
/ 31 августа 2011

Это должно сделать для вас:

NSString* path1 = @"http://myserver.com/path1/path2";
NSString* path2 = @"/path1/path2/cache/image1.jpg";

NSMutableArray* path1Components = [NSMutableArray arrayWithArray:[path1 componentsSeparatedByString:@"/"]];
NSMutableArray* path2Components = [NSMutableArray arrayWithArray:[path2 componentsSeparatedByString:@"/"]];
[path2Components removeObjectAtIndex:0];

if ([path1Components containsObject:[path2Components objectAtIndex:0]]) {

    NSUInteger objectIndex = [path1Components indexOfObject:[path2Components objectAtIndex:0]];

    [path1Components removeObjectsInRange:NSMakeRange(objectIndex, [path1Components count]-objectIndex)];

    [path1Components addObjectsFromArray:path2Components];

    NSString* mergedPath = [path1Components componentsJoinedByString:@"/"];

    NSLog(@"%@",mergedPath);

}
0 голосов
/ 31 августа 2011

Что по этому поводу:

- (NSString *)mergeStringsPrefix:(NSString *)prefix suffix:(NSString *)suffix
{
    NSString *string = [NSString stringWithFormat:@"%@", prefix];

    NSArray *prefixComponents = [prefix pathComponents];
    NSArray *suffixComponents = [suffix pathComponents];

    if ([prefixComponents count] == 0) return [string retain]; 
    int rootIndex = [suffixComponents indexOfObject:@"/"];
    int index = 1;
    if (rootIndex == NSNotFound || rootIndex != 0) index = 0;

    int startIndex = [prefixComponents indexOfObject:[suffixComponents objectAtIndex:index]];
    if (startIndex == NSNotFound) return nil;

    if ([suffixComponents count] - index < [prefixComponents count] - startIndex) return nil;

    // fing length and check merge compatability
    BOOL equalParts = YES;
    for (int i=startIndex; i<[prefixComponents count] && equalParts; i++, index++)
    {
        NSString *el1 = [prefixComponents objectAtIndex:i];
        NSString *el2 = [suffixComponents objectAtIndex:index];

        if ([el1 compare:el2] != NSOrderedSame) equalParts = NO;
    }
    if (!equalParts) return nil;
    // merge
    for (int i=index; i<[suffixComponents count]; i++)
    {
        string = [string stringByAppendingFormat:@"/%@", [suffixComponents objectAtIndex:i]];
    }

    return [string retain];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...