Pierwsza wielka litera w NSString
Jak mogę pisać wielką literą fisrt NSString i usuwać akcenty ?
Na przykład, Àlter
, Alter
, alter
powinno zostać Alter
.
Ale, /lter
, )lter
, :lter
powinno pozostać tym samym , ponieważ pierwszy znak nie jest literą.
7 answers
Ponieważ chcesz usunąć znaki diakrytyczne, możesz użyć tej metody w połączeniu z popularnymi metodami manipulacji łańcuchami, takimi jak:
/* 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]];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-09 09:26:25
Proszę nie używać tej metody. Ponieważ jedna litera może mieć różną liczbę w innym języku. Możesz sprawdzić odpowiedź dreamlax. Ale jestem pewien, że nauczysz się czegoś z mojej odpowiedzi. Happy coding :)
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.
}
Dlaczego mam dbać o liczbę liter?
Jeśli spróbujesz uzyskać dostęp (np.NSMakeRange
, substringToIndex
itd)
pierwszy znak w pustym łańcuchu jak @""
, a następnie aplikacja zostanie zawieszona. Aby tego uniknąć, musisz sprawdzić, czy istnieje przed sprawdzam.
A gdyby mój sznurek był zerowy?
Panie Nil: jestem "nil".Mogę przetrawić wszystko, co mi wyślesz. Nie pozwolę, aby Twoja aplikacja sama się zawiesiła. ;)
nil
będzie obserwować każdą metodę połączenia wysłać do niego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-06 13:46:10
Możesz użyć NSString
' s:
- (NSString *)capitalizedString
Lub (iOS 6.0 i nowsze):
- (NSString *)capitalizedStringWithLocale:(NSLocale *)locale
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-27 06:32:04
Rzucę listę kroków, których możesz użyć, by to zrobić. Mam nadzieję, że możesz przejść bez problemu! :)
- Użyj
decomposedStringWithCanonicalMapping
, aby rozłożyć akcenty (ważne, aby upewnić się, że znaki akcentowane nie są usuwane niepotrzebnie) - Użyj characterindex: aby wyodrębnić pierwszą literę (indeks 0), użyj
upperCaseString
, aby przekształcić ją w literę capitol i użyjstringByReplacingCharactersInRange
, aby zastąpić pierwszą literę z powrotem na oryginalny ciąg znaków. - w tym kroku, przed przekształceniem go w wielkie litery, możesz sprawdzić, czy pierwsza litera jest jednym ze znaków, których nie chcesz zastąpić, np.": "Lub";", a jeśli tak, nie wykonuj reszty procedury.
- wykonaj
[theString stringByReplacingOccurrencesOfString:@"
" withString:@""]` rodzaj wywołania, aby usunąć wszelkie pozostałe akcenty.
To wszystko powinno być pisane wielką literą i usuwać wszelkie akcenty:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-09 09:27:12
Używam tej metody w podobnych sytuacjach, ale nie jestem pewien, czy pytanie zadane, aby inne litery były małe.
- (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]];
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-25 15:02:13
Tylko dla dodania niektórych opcji, używam tej kategorii, aby zapisać pierwszą literę 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
I wtedy możesz po prostu zadzwonić:
NSString *helloWorld = @"hello world";
NSString *capitalized = [helloWorld capitalizeFirst];
NSLog(@"%@ - %@", helloWorld, capitalized);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-14 17:10:19
Od wersji IOS 9.0 istnieje metoda zapisu łańcuchów wielkimi literami przy użyciu bieżących ustawień regionalnych:
@property(readonly, copy) NSString *localizedCapitalizedString;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-21 10:29:35