maneira fácil de definir um único caractere de um NSString para maiúsculas

votos
10

Eu gostaria de mudar o primeiro caractere de um NSString para maiúsculas. Infelizmente, - (NSString *)capitalizedStringconverte a primeira letra de cada palavra em maiúsculas. Existe uma maneira fácil de converter apenas um único caractere em maiúsculas?

Eu estou usando atualmente:

NSRange firstCharRange = NSMakeRange(0,1);
NSString* firstCharacter = [dateString substringWithRange:firstCharRange];
NSString* uppercaseFirstChar = [firstCharacter originalString];
NSMutableString* capitalisedSentence = [originalString mutableCopy];
[capitalisedSentence replaceCharactersInRange:firstCharRange withString:uppercaseFirstChar];

Que parece um pouco complicado, mas pelo menos não faz suposições sobre a codificação da seqüência de caracteres Unicode subjacente.

Publicado 19/05/2009 em 17:52
fonte usuário
Em outras línguas...                            


5 respostas

votos
17

abordagem muito semelhante ao que você tem, mas um pouco mais condense:

 NSString *capitalisedSentence = 
    [dateString stringByReplacingCharactersInRange:NSMakeRange(0,1)  
    withString:[[dateString  substringToIndex:1] capitalizedString]];
Respondeu 19/05/2009 em 20:59
fonte usuário

votos
3

Desde NSStringé imutável, o que você tem parece ser uma boa maneira de fazer o que você quer fazer. As implementações (NSString*)uppercaseStringe métodos similares, provavelmente, se parecem muito com o que você escreveu, como eles retornam um novo NSStringem vez de modificar o que você enviou a mensagem.

Respondeu 19/05/2009 em 20:53
fonte usuário

votos
1

Com o objetivo de legibilidade máxima, fazer uma categorysobre NSStringe dar-lhe esta função:

NSString *capitalizeFirstLetter(NSString *string) {
    NSString *firstCapital = [string substringToIndex:1].capitalizedString;
    return [string stringByReplacingCharactersInRange:NSMakeRange(0, 1) withString:firstCapital];
}

Então, em seu código onde você quiser:

NSString *capitalizedSentence = capitalizeFirstLetter(dateString);

Este tipo de código raramente pertence ao ponto onde você precisar dele e geralmente deve ser tomada afastado em uma classe de utilidade ou de categorylegibilidade para melhorar.

Respondeu 18/11/2013 em 23:23
fonte usuário

votos
1

Se você perfil essas soluções são muito mais lento, em seguida, fazer isso:

NSMutableString *capitolziedString = [NSMutableString stringWithString:originalString];
NSString *firstChar = [[capitolziedString substringWithRange:NSMakeRange(0,1)] uppercaseString];
[capitolziedString replaceCharactersInRange:NSMakeRange(0, 1) withString:firstChar];

em testes em um iPhone 4 rodando iOS 5:
@ solução de doomspork correu em 0.115750 ms
enquanto acima correu em 0.064250 ms;

em testes em um simulador rodando iOS 5:
@ solução de doomspork correu em 0.021232 ms
enquanto acima correu em 0.007495 ms;

Respondeu 18/06/2013 em 21:25
fonte usuário

votos
1

Eu tinha uma exigência semelhante, mas foi para caracteres dentro da cadeia. Este i assumindo é o seu índice para o personagem que você quer para maiúsculas isso funcionou para mim:

curword = [curword stringByReplacingCharactersInRange:NSMakeRange(i,1) 
           withString:[[curword substringWithRange:NSMakeRange(i, 1)] capitalizedString]];
Respondeu 07/09/2011 em 16:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more