Заменить несколько символов в строке в Objective C?

Прямого перевода нет: fish использует элементы, разделенные запятыми, внутри фигурных скобок - https://fishshell.com/docs/current/index.html#expand-brace

Вы также не можете сделать for i in /dev/sd[b-g], потому что рыба не использует наборы символов в качестве подстановочных знаков при глобализации - https://fishshell.com/docs/current/index.html#expand-wildcard

Вы заканчиваете тем, что вызываете какую-то внешнюю программу для генерации этого списка файлов, и вы знаете, что bash работает, поэтому:

for i in (bash -c 'printf "%s\n" /dev/sd{b..g}'); ...

Это пример одного из принципов дизайна fish [ 114]:

Все, что можно сделать на других языках оболочки, должно быть возможно в рыбе, хотя при этом рыба может полагаться на внешние команды.

BLOCKQUOTE>

48
задан Matt Sephton 3 April 2009 в 02:32
поделиться

3 ответа

Несколько неэффективный способ сделать это:

NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo

Посмотрите на NSScanner и -[NSString rangeOfCharacterFromSet: ...] если Вы хотите сделать это немного более эффективно.

122
ответ дан Nicholas Riley 7 November 2019 в 12:04
поделиться

Бывают ситуации, когда ваш метод достаточно хорош, я думаю, Мэтт .. Кстати, я думаю, что лучше использовать

[strNew setString: [strNew stringByReplacingOccurrencesOfString:@":" withString:@""]];

, а не

strNew = [strNew stringByReplacingOccurrencesOfString:@"/" withString:@""];

, поскольку я думаю, вы перезаписываете указатель NSMutableString с NSString, который может вызвать утечку памяти.

27
ответ дан 7 November 2019 в 12:04
поделиться
+ (NSString*) decodeHtmlUnicodeCharactersToString:(NSString*)str
{
    NSMutableString* string = [[NSMutableString alloc] initWithString:str];  // #&39; replace with '
    NSString* unicodeStr = nil;
    NSString* replaceStr = nil;
    int counter = -1;

    for(int i = 0; i < [string length]; ++i)
    {
        unichar char1 = [string characterAtIndex:i]; 
        for (int k = i + 1; k < [string length] - 1; ++k)
        {
            unichar char2 = [string characterAtIndex:k]; 

            if (char1 == '&'  && char2 == '#' ) 
            { 
                ++counter;
                unicodeStr = [string substringWithRange:NSMakeRange(i + 2 , 2)]; // read integer value i.e, 39
                replaceStr = [string substringWithRange:NSMakeRange (i, 5)];  // #&39;
                [string replaceCharactersInRange: [string rangeOfString:replaceStr] withString:[NSString stringWithFormat:@"%c",[unicodeStr intValue]]];
                break;
            }
        }
    }

    [string autorelease];

    if (counter > 1)
        return [self decodeHtmlUnicodeCharactersToString:string]; 
    else
        return string;
}
2
ответ дан 7 November 2019 в 12:04
поделиться