Sonderzeichen von einem NSString entfernen

  • Quellcode

    1. NSString *string1 = @"Frohes Neues / 2011";
    2. NSScanner *scanner = [NSScanner scannerWithString:string1];
    3. [scanner scanCharactersFromSet:[NSCharacterSet alphanumericCharacterSet] intoString:string2];

    Die Warnung passing argument 2 of 'scanCharactersFromSet:intoString:' from incompatible pointer type verstehe ich gar nicht...?
  • Oder als Variante B:

    Quellcode

    1. NSArray *components = [string1 componentsSeparatedByCharactersInSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]];
    2. string2 = [components componentsJoinedByString:@""];


    (Diese Idee ist allerdings nicht von mir, die hatte Amin schonmal irgendwo gepostet)
  • Du musst das in einer Loop ausführen, so wie oben hört der Scanner auf, sobald er Zeichen findet, die nicht im character set drin sind.

    Quellcode

    1. NSString *string1 = @"Frohes Neues / 2011";
    2. NSMutableString *string2 = [NSMutableString string];
    3. NSString *temp = nil;
    4. NSScanner *scanner = [NSScanner scannerWithString:string1];
    5. NSCharacterSet *charSet = [NSCharacterSet alphanumericCharacterSet];
    6. while (![scanner isAtEnd]) {
    7. [scanner scanCharactersFromSet:charSet intoString:&temp];
    8. [string2 appendString:temp];
    9. [scanner scanUpToCharactersFromSet:charSet intoString:NULL];
    10. }
    11. NSLog(@"\"%@\" -> \"%@\"", string1, string2);
    Alles anzeigen


    Ergibt:
    "Frohes Neues / 2011" -> "FrohesNeues2011"
    Widgetschmie.de • Life is too short for gadgets

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pascal () aus folgendem Grund: Codekorrektur

  • Komponenten

    AR.DDev schrieb:

    Hallo,

    ich brauche einen NSString ohne Sonderzeichen.
    Gibt es da eine "einfache" Möglichkeit, alle zu entfernen?


    Es gibt noch eine andere Methode:

    Quellcode

    1. NSArray *components = [myString componentsSeparatedByCharactersInSet:[[NSCharacterSet alphanumericCharacterSet]invertedSet]];
    2. myString = [components componentsJoinedByString:@""];
    I would be embarrassed if they did not spy on me.
  • Um das Beispiel von longW noch zu erweitern (damit die Leerzeichen dableiben):

    Quellcode

    1. NSString *string1 = @"Frohes Neues / 2011";
    2. NSString *string2 = nil;
    3. NSMutableCharacterSet *charSet = [NSMutableCharacterSet alphanumericCharacterSet];
    4. [charSet addCharactersInString:@" "];
    5. [charSet invert];
    6. NSArray *components = [string1 componentsSeparatedByCharactersInSet:charSet];
    7. string2 = [components componentsJoinedByString:@""];
  • Daniel Schroth schrieb:

    Um das Beispiel von longW noch zu erweitern (damit die Leerzeichen dableiben):

    Quellcode

    1. NSString *string1 = @"Frohes Neues / 2011";
    2. NSString *string2 = nil;
    3. NSMutableCharacterSet *charSet = [NSMutableCharacterSet alphanumericCharacterSet];
    4. [charSet addCharactersInString:@" "];
    5. [charSet invert];
    6. NSArray *components = [string1 componentsSeparatedByCharactersInSet:charSet];
    7. string2 = [components componentsJoinedByString:@""];


    Also wenn schon, denn schon.
    Statt Leerzeichen würde ich

    Quellcode

    1. [NSCharacterSet whitespaceCharacterSet];

    bzw.

    Quellcode

    1. [NSCharacterSet whitespaceAndNewlineCharacterSet];

    wählen, um das Layout zu erhalten.
    Ich bin mir aber nicht sicher damit, der Zeitgenosse hier scheint mit URLs zu arbeiten.
    I would be embarrassed if they did not spy on me.
  • AR.DDev schrieb:

    Das Ergebnis ist Frohes. Wo ist denn der Rest oder habe ich da was falsch verstanden?

    Keine Ahnung ob du bereits am Ziel bist, ich hab mein Beispiel oben komplettiert und erhalte nun dies:

    "Frohes Neues / 2011" -> "FrohesNeues2011"

    Wenn du die Leerzeichen behalten willst musst du das charSet entsprechend erweitern.


    Hier nochmal der Code:

    Quellcode

    1. NSString *string1 = @"Frohes Neues / 2011";
    2. NSMutableString *string2 = [NSMutableString string];
    3. NSString *temp = nil;
    4. NSScanner *scanner = [NSScanner scannerWithString:string1];
    5. NSCharacterSet *charSet = [NSCharacterSet alphanumericCharacterSet];
    6. while (![scanner isAtEnd]) {
    7. [scanner scanCharactersFromSet:charSet intoString:&temp];
    8. [string2 appendString:temp];
    9. [scanner scanUpToCharactersFromSet:charSet intoString:NULL];
    10. }
    11. NSLog(@"\"%@\" -> \"%@\"", string1, string2);
    Alles anzeigen
    Widgetschmie.de • Life is too short for gadgets