Первичная первая буква в NSString
Как я могу загладить букву fisrt NSString и удалить любые акценты?
Например, Àlter
, Alter
, Alter
должен стать Alter
.
Но /lter
, )lter
, :lter
должен оставаться тем же, поскольку первый символ не является буквой.
Ответы
Ответ 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
- ваш друг.
Ответ 3
Вы можете использовать NSString
's:
- (NSString *)capitalizedString
или (iOS 6.0 и выше):
- (NSString *)capitalizedStringWithLocale:(NSLocale *)locale
Ответ 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;