Подтвердить что ты не робот

Первичная первая буква в NSString

Как я могу загладить букву fisrt NSString и удалить любые акценты?

Например, Àlter, Alter, Alter должен стать Alter.

Но /lter, )lter, :lter должен оставаться тем же, поскольку первый символ не является буквой.

4b9b3361

Ответ 1

Так как вы хотите удалить диакритические знаки, вы можете использовать этот метод в сочетании с обычными методами манипуляции строками, например:

/* create a locale where diacritic marks are not considered important, e.g. US English */
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"] autorelease];

NSString *input = @"Àlter";

/* get first char */
NSString *firstChar = [input substringToIndex:1];

/* remove any diacritic mark */
NSString *folded = [firstChar stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:locale];

/* create the new string */
NSString *result = [[folded uppercaseString] stringByAppendingString:[input substringFromIndex:1]];

Ответ 2

Пожалуйста, НЕ используйте этот метод. Потому что одно письмо может иметь разные значения на разных языках. Вы можете проверить ответ dreamlax для этого. Но я уверен, что вы узнаете что-нибудь из моего ответа. Счастливое кодирование:)

NSString *capitalisedSentence = nil;

//Does the string live in memory and does it have at least one letter?
if (yourString && yourString.length > 0) {
    // Yes, it does.

     capitalisedSentence = [yourString stringByReplacingCharactersInRange:NSMakeRange(0,1)
                                                               withString:[[yourString substringToIndex:1] capitalizedString]];
} else {
    // No, it doesn't.
}

Зачем мне беспокоиться о количестве букв?

Если вы попытаетесь получить доступ (например, NSMakeRange, substringToIndex и т.д.),  первый символ в пустой строке, такой как @"", тогда ваше приложение выйдет из строя. Чтобы этого избежать, вы должны убедиться, что он существует до его обработки.

Что делать, если моя строка была нулевой?

Mr.Nil: Я "ноль". Я могу переварить все, что вы мне присылаете. Я не позволю вашему приложению рушиться сам по себе.;)

Animation of a person swallowing fake explosives, it going off in his stomach, and then smoke coming from his mouth in a cartoonish fashion without injury.

nil будет наблюдать любой вызов метода, который вы ему отправляете.

Итак, он переварит все, что вы попробуете, nil - ваш друг.

Ответ 4

Собираем список шагов, которые, я думаю, вы можете использовать, чтобы сделать это. Надеюсь, вы сможете пройти без проблем!:)

  • Используйте decomposedStringWithCanonicalMapping для разложения любых акцентов (важно, чтобы символы с акцентом не просто удалялись без необходимости)
  • Используйте characterAtIndex: чтобы извлечь первую букву (индекс 0), используйте upperCaseString, чтобы превратить ее в капитолийую надпись и используйте stringByReplacingCharactersInRange, чтобы заменить первую букву обратно на исходную строку.
  • На этом шаге, прежде чем превращать его в верхний регистр, вы можете проверить, является ли первая буква одним из символов, которые вы не хотите заменять, например. ":" или ";", и если это так, не выполняйте оставшуюся процедуру.
  • Сделайте [theString stringByReplacingOccurrencesOfString:@" "withString: @" "]` вид вызова, чтобы удалить оставшиеся акценты.

Это все должно загладить вашу первую букву И удалить любые акценты:)

Ответ 5

Я использую этот метод для подобных ситуаций, но я не уверен, что вопрос попросил сделать другие буквы строчными.

- (NSString *)capitalizedOnlyFirstLetter {

    if (self.length < 1) {
        return @"";
    }
    else if (self.length == 1) {
        return [self capitalizedString];
    }
    else {

        NSString *firstChar = [self substringToIndex:1];
        NSString *otherChars = [self substringWithRange:NSMakeRange(1, self.length - 1)];

        return [NSString stringWithFormat:@"%@%@", [firstChar uppercaseString], [otherChars lowercaseString]];
    }
}

Ответ 6

Для добавления некоторых опций я использую эту категорию для заглавной буквы первой буквы NSString.

@interface NSString (CapitalizeFirst)
    - (NSString *)capitalizeFirst;
    - (NSString *)removeDiacritic;
@end

@implementation NSString (CapitalizeFirst)
- (NSString *)capitalizeFirst {
    if ( self.length <= 1 ) {
        return [self uppercaseString];
    }
    else {
        return [[[[self substringToIndex:1] removeDiacritic] uppercaseString] stringByAppendingString:[[self substringFromIndex:1] removeDiacritic]];
        // Or: return [NSString stringWithFormat:@"%@%@", [[[self substringToIndex:1] removeDiacritic] uppercaseString], [[self substringFromIndex:1] removeDiacritic]];
    }
}

- (NSString *)removeDiacritic { // Taken from: http://stackoverflow.com/a/10932536/1986221
    NSData *data = [NSData dataUsingEncoding:NSASCIIStringEncoding
                       allowsLossyConversion:YES];
    return [[NSString alloc] initWithData:data
                                 encoding:NSASCIIStringEncoding];
}
@end

И тогда вы можете просто позвонить:

NSString *helloWorld  = @"hello world";
NSString *capitalized = [helloWorld capitalizeFirst];
NSLog(@"%@ - %@", helloWorld, capitalized);

Ответ 7

Так как iOS 9.0 существует метод для заглавной строки с использованием текущей локали:

@property(readonly, copy) NSString *localizedCapitalizedString;