@"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"
.
@"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"
.
"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.
Hier ist eine etwas weniger komplizierte Antwort:
NSString *myString = @"abcdefg";
NSString *mySmallerString = [myString substringToIndex:4];
Siehe auch substringWithRange und substringFromIndex
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:@":"];
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ür rangeOfString: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 sein NSMakeRange(start, end- start)
;
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);
<i></i>
Tag in meinem Projekt zu erhalten und diese Zeichenfolgen kursiv zu machen. :)