• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

NSString suchen & ersetzen

Alecco

Transparent von Croncels
Registriert
17.02.09
Beiträge
306
Hi,

ich versuche gerade den Text aus einem UITextView zu durchsuchen. Ich habe meinen Text in einem NSString gespichert und möchte nun nach einem Suchwort suchen:

Code:
NSString *satz = @"hallo apfeltalk, das ist ein mustertext";
NSString *wort = @"apfel";
NSString *gefunden;

aRange = [satz rangeOfString:wort options:(NSCaseInsensitiveSearch | NSBackwardsSearch)];
gefunden = NSStringFromRange(aRange);
NSLog(gefunden);
Damit wird mir in der Konsole auch die richtige Position angezeigt.

Meine Frage lautet: Wie kann ich nun den auf den NSString satz zugreifen? Z.b. möchte ich suchen&ersetzen. Kann ich auf einen NSString wie auf ein Array zugreifen?

:innocent:
 
Ein NSString ist nicht veränderbar. Dafür musst Du schon einen NSMutableString nehmen.

MacApple
 
Ein NSString Objekt an sich kannst du nicht verändern, wie ja bereits gesagt wurde. Eine Möglichkeit ist, einen veränderbaren String - einen NSMutableString - zu verwenden, wie auch schon bereits gesagt wurde.

Die Zweite Möglichkeit sind bestimmte Methoden von NSString, die dir ein neues, verändertes NSString Objekt zurückliefern.
Hierzu gibt es z.B. folgende Methode.
Code:
- (NSString *)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement

Schau dir am Besten mal die NSString Class Reference von Apple an. Vor allem die Methoden unter der Überschrift "Replacing Substrings"
 
Wenn du mit CStrings (also char-pointers) vertraut bist, dann findest du auch nützliche Methoden und kannst den "Umweg" über C selbst machen. So in etwa:

Code:
NSString *myString;
const char *cstr;

// * C string holen:
[myString getCString:cstr];
// - oder:
cstr = [myString cStringUsingEncoding:(_encoding option_)];

// * string modifizieren...

// * String wieder setzen:
NSString *myModString = [NSString stringWithCString:cstr encoding:(_encoding option_)];

Beachte: Du musst nie eine Länge angeben, weil CStrings definitionsgemäss nullterminiert sein müssen! just to keep that in mind... :)

Gruss ppocket
 
Zuletzt bearbeitet:
Wenn du mit CStrings (also char-pointers) vertraut bist, dann findest du auch nützliche Methoden und kannst den "Umweg" über C selbst machen.
Uhhh, ich rate dringend von solchen Umwegen ohne Not ab. Mit C-Strings lassen sich hervorragend Buffer Overflows basteln.

MacApple
 
Ich weiss schon. Falls er aber vertraut damit ist, tut sich eine für ihn altbekannte Möglichkeit auf, die er vielleicht vorher nicht in Betracht gezogen hat. Overflows hin oder her, wenn er die verhindern kann, kein Problem :D. Ich würde das auch nie im Leben so machen :).

Gruss ppocket
 
Ich weiss schon. Falls er aber vertraut damit ist, tut sich eine für ihn altbekannte Möglichkeit auf, die er vielleicht vorher nicht in Betracht gezogen hat. Overflows hin oder her, wenn er die verhindern kann, kein Problem :D.
Es gibt massenweise Programmierer, die mit C-Strings vertraut sind und trotzdem schleichen sich immer wieder solche Fehler ein.

Ich würde das auch nie im Leben so machen :).
Dann solltest Du das anderen auch nicht vorschlagen. ;)

MacApple
 
Es war kein Vorschlag, nur ein Hinweis darauf, dass es diese Möglichkeit auch noch geben würde :)

Gruss ppocket