Je développe une application iPhone. Dans une étiquette, je souhaite afficher la première lettre du nom majuscule d'un utilisateur. Comment je fais ça?
S'il n'y a qu'une seule chaîne de mots, utilisez la méthode
let capitalizedString = myStr.capitalized // capitalizes every Word
Sinon, pour les chaînes de plusieurs mots, vous devez extraire le premier caractère et ne mettre que ce caractère en majuscule.
(2014-07-24: La réponse actuellement acceptée n'est pas correcte) La question est très précise: mettez la première lettre en majuscule, laissez le reste en minuscule. L'utilisation de capitalizedString produit un résultat différent: «chaîne capitalisée» au lieu de «chaîne capitalisée». Il existe une autre variante selon les paramètres régionaux, qui est capitalizedStringWithLocale, mais elle n'est pas correcte pour l'espagnol. Elle utilise actuellement les mêmes règles qu'en anglais.
NSString *abc = @"this is test";
abc = [NSString stringWithFormat:@"%@%@",[[abc substringToIndex:1] uppercaseString],[abc substringFromIndex:1] ];
NSLog(@"abc = %@",abc);
Si quelqu'un est toujours intéressé en 2016, voici un Swift 3 extension:
extension String {
func capitalizedFirst() -> String {
let first = self[self.startIndex ..< self.index(startIndex, offsetBy: 1)]
let rest = self[self.index(startIndex, offsetBy: 1) ..< self.endIndex]
return first.uppercased() + rest.lowercased()
}
func capitalizedFirst(with: Locale?) -> String {
let first = self[self.startIndex ..< self.index(startIndex, offsetBy: 1)]
let rest = self[self.index(startIndex, offsetBy: 1) ..< self.endIndex]
return first.uppercased(with: with) + rest.lowercased(with: with)
}
}
Ensuite, vous l’utilisez exactement comme vous le feriez pour les lettres majuscules () ou capitalisées () habituelles:
myString.capitalizedFirst()
ou myString.capitalizedFirst(with: Locale.current)
Ceci est pour votre catégorie NSString+Util
...
- (NSString *) capitalizedFirstLetter {
NSString *retVal;
if (self.length < 2) {
retVal = self.capitalizedString;
} else {
retVal = string(@"%@%@",[[self substringToIndex:1] uppercaseString],[self substringFromIndex:1]);
}
return retVal;
}
Vous pouvez le faire avec NSString stringWithFormat
, bien sûr. J'utilise cette bizarrerie:
#define string(...) \
[NSString stringWithFormat:__VA_ARGS__]
Simplement
- (NSString *)capitalizeFirstLetterOnlyOfString:(NSString *)string{
NSMutableString *result = [string lowercaseString].mutableCopy;
[result replaceCharactersInRange:NSMakeRange(0, 1) withString:[[result substringToIndex:1] capitalizedString]];
return result;
}
Voici comment cela a fonctionné pour moi:
NSString *serverString = jsonObject[@"info"];
NSMutableString *textToDisplay = [NSMutableString stringWithFormat:@"%@", serverString];
[textToDisplay replaceCharactersInRange:NSMakeRange(0, 1) withString:[textToDisplay substringToIndex:1].capitalizedString];
cell.infoLabel.text = textToDisplay;
J'espère que ça aide.
voici une extension Swift pour cela
extension NSString {
func capitalizeFirstLetter() -> NSString {
return self.length > 1 ?
self.substringToIndex(1).capitalizedString + self.substringFromIndex(1) :
self.capitalizedString
}
}
En prolongement de la réponse acceptée
capitalizedString est utilisé pour créer des lettres majuscules.
NSString *capitalizedString = [myStr capitalizedString]; // capitalizes every Word
Mais si vous avez beaucoup de mots dans une chaîne et que vous ne voulez que le premier caractère majuscule, utilisez la solution ci-dessous
NSString *firstCapitalChar = [[string substringToIndex:1] capitalizedString];
NSString *capString = [string stringByReplacingCharactersInRange:NSMakeRange(0,1) withString: capString];
// extract first character and make only that character upper case.