@"value:hello World:value"
Was soll ich verwenden, wenn ich einen Wert vom NSString erhalten möchte?
Der von mir gewünschte Rückgabewert ist @"hello World"
.
objective-c
cocoa-touch
nsstring
Csabi
quelle
quelle
"hello World"
?return @"hello World"
. Möchten Sie nur das zurückgeben, was sich zwischen den Doppelpunkten befindet? Möchten Sie alles links vom Doppelpunkt ganz links und alles rechts vom Doppelpunkt ganz rechts entfernen? Es gibt keine klar definierten Eingabe-Ausgabe-Kriterien für diese Frage (wie wir aus der resultierenden Liste von Fragen sehen, die alle das Problem mit einer Vielzahl von Ansätzen lösen).Antworten:
Option 1:
NSString *haystack = @"value:hello World:value"; NSString *haystackPrefix = @"value:"; NSString *haystackSuffix = @":value"; NSRange needleRange = NSMakeRange(haystackPrefix.length, haystack.length - haystackPrefix.length - haystackSuffix.length); NSString *needle = [haystack substringWithRange:needleRange]; NSLog(@"needle: %@", needle); // -> "hello World"
Option 2:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^value:(.+?):value$" options:0 error:nil]; NSTextCheckingResult *match = [regex firstMatchInString:haystack options:NSAnchoredSearch range:NSMakeRange(0, haystack.length)]; NSRange needleRange = [match rangeAtIndex: 1]; NSString *needle = [haystack substringWithRange:needleRange];
Dieser könnte für Ihren eher trivialen Fall etwas übertrieben sein.
Option 3:
NSString *needle = [haystack componentsSeparatedByString:@":"][1];
Dieser erstellt beim Teilen drei temporäre Zeichenfolgen und ein Array.
Alle Snippets setzen voraus, dass das Gesuchte tatsächlich in der Zeichenfolge enthalten ist.
quelle
Hier ist eine etwas weniger komplizierte Antwort:
NSString *myString = @"abcdefg"; NSString *mySmallerString = [myString substringToIndex:4];
Siehe auch substringWithRange und substringFromIndex
quelle
Hier ist eine einfache Funktion, mit der Sie das tun können, wonach Sie suchen:
- (NSString *)getSubstring:(NSString *)value betweenString:(NSString *)separator { NSRange firstInstance = [value rangeOfString:separator]; NSRange secondInstance = [[value substringFromIndex:firstInstance.location + firstInstance.length] rangeOfString:separator]; NSRange finalRange = NSMakeRange(firstInstance.location + separator.length, secondInstance.location); return [value substringWithRange:finalRange]; }
Verwendung:
NSString *myName = [self getSubstring:@"This is my :name:, woo!!" betweenString:@":"];
quelle
getSubstring:…
sollte aufgerufen werden,substringInString:…
da Sie keinen Teilstring an ihn übergeben und Methoden, die mit beginnen,get…
normalerweise einen Pufferzeiger zum Schreiben übergeben werden.substringFromIndex:
erstellt eine Zwischenzeichenfolge, die unnötig ist, dafürrangeOfString:options:range:
ist. Zuletzt, indem Sie das unsichere Snippet in eine vermeintlich generische Methode einschließen, maskieren Sie einen Fehler: Wenn das Trennzeichen ein oder mehrere Male in der Zeichenfolge vorhanden ist, wird eine Ausnahme außerhalb des Bereichs angezeigt.Verwenden Sie dies auch
NSString *ChkStr = [MyString substringWithRange:NSMakeRange(5, 26)];
Hinweis - Ihr
NSMakeRange(start, end)
sollte seinNSMakeRange(start, end- start)
;quelle
Hier ist eine kleine Kombination aus Antworten von @Regexident Option 1 und @Garett, um einen leistungsstarken String-Cutter zwischen einem Präfix und einem Suffix mit MEHR ... UND MEHR Wörtern zu erhalten.
NSString *haystack = @"MOREvalue:hello World:valueANDMORE"; NSString *prefix = @"value:"; NSString *suffix = @":value"; NSRange prefixRange = [haystack rangeOfString:prefix]; NSRange suffixRange = [[haystack substringFromIndex:prefixRange.location+prefixRange.length] rangeOfString:suffix]; NSRange needleRange = NSMakeRange(prefixRange.location+prefix.length, suffixRange.location); NSString *needle = [haystack substringWithRange:needleRange]; NSLog(@"needle: %@", needle);
quelle
<i></i>
Tag in meinem Projekt zu erhalten und diese Zeichenfolgen kursiv zu machen. :)