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ą.

Author: Binarian, 2011-09-09

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]];
 53
Author: dreamlax,
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. ;)

Animacja osoby połykającej fałszywe Materiały wybuchowe, wybuchające w żołądku, a następnie dym wydobywający się z jego ust w kreskówkowy sposób bez obrażeń.

nil będzie obserwować każdą metodę połączenia wysłać do niego.

Więc strawi wszystko, co na nim spróbujesz, to twój przyjaciel.
 117
Author: Vijay-Apple-Dev.blogspot.com,
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
 90
Author: meaning-matters,
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żyj stringByReplacingCharactersInRange, 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:)

 2
Author: Madhu,
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]];
    }
}
 1
Author: Josip B.,
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);
 0
Author: Alejandro Iván,
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;
 0
Author: ASLLOP,
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