Как я могу загладить букву fisrt NSString и удалить любые акценты?
Например, Àlter
, Alter
, Alter
должен стать Alter
.
Но /lter
, )lter
, :lter
должен оставаться тем же, поскольку первый символ не является буквой.
Как я могу загладить букву fisrt NSString и удалить любые акценты?
Например, Àlter
, Alter
, Alter
должен стать Alter
.
Но /lter
, )lter
, :lter
должен оставаться тем же, поскольку первый символ не является буквой.
Так как вы хотите удалить диакритические знаки, вы можете использовать этот метод в сочетании с обычными методами манипуляции строками, например:
/* 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]];
Пожалуйста, НЕ используйте этот метод. Потому что одно письмо может иметь разные значения на разных языках. Вы можете проверить ответ 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
и т.д.),
первый символ в пустой строке, такой как @""
, тогда ваше приложение выйдет из строя. Чтобы этого избежать, вы должны убедиться, что он существует до его обработки.
nil
будет наблюдать любой вызов метода, который вы ему отправляете.
Итак, он переварит все, что вы попробуете, nil
- ваш друг.
Вы можете использовать NSString
's:
- (NSString *)capitalizedString
или (iOS 6.0 и выше):
- (NSString *)capitalizedStringWithLocale:(NSLocale *)locale
Собираем список шагов, которые, я думаю, вы можете использовать, чтобы сделать это. Надеюсь, вы сможете пройти без проблем!:)
decomposedStringWithCanonicalMapping
для разложения любых акцентов (важно, чтобы символы с акцентом не просто удалялись без необходимости)upperCaseString
, чтобы превратить ее в капитолийую надпись и используйте stringByReplacingCharactersInRange
, чтобы заменить первую букву обратно на исходную строку.[theString stringByReplacingOccurrencesOfString:@"
"withString: @" "]` вид вызова, чтобы удалить оставшиеся акценты.Это все должно загладить вашу первую букву И удалить любые акценты:)
Я использую этот метод для подобных ситуаций, но я не уверен, что вопрос попросил сделать другие буквы строчными.
- (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]];
}
}
Для добавления некоторых опций я использую эту категорию для заглавной буквы первой буквы 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);
Так как iOS 9.0 существует метод для заглавной строки с использованием текущей локали:
@property(readonly, copy) NSString *localizedCapitalizedString;