Ich habe eine durch Leerzeichen getrennte Zeichenfolge wie @"abc xyz http://www.example.com aaa bbb ccc"
.
Wie kann ich die Teilzeichenkette extrahieren @"http://www.example.com"
von ihr?
Ich habe eine durch Leerzeichen getrennte Zeichenfolge wie @"abc xyz http://www.example.com aaa bbb ccc"
.
Wie kann ich die Teilzeichenkette extrahieren @"http://www.example.com"
von ihr?
Ich finde PHPs substr()
wirklich bequem. Schau dir mein NSString-Kategorie wenn Sie so etwas machen wollen:
substr(@"abc xyz http://www.example.com aaa bbb ccc", 8,-12)
oder
substr(@"abc xyz http://www.example.com aaa bbb ccc", 8, 18)
In beiden Fällen erhalten Sie das Ergebnis von http://www.example.com
Hier ist eine Kopie des entsprechenden Teils des Codes:
__attribute__((overloadable))
NSString *substr(NSString *str, int start)
{
return substr(str, start, 0);
}
__attribute__((overloadable))
NSString *substr(NSString *str, int start, int length)
{
NSInteger str_len = str.length;
if (!str_len) return @"";
if (str_len < length) return str;
if (start < 0 && length == 0)
{
return [str substringFromIndex:str_len+start];
}
if (start == 0 && length > 0)
{
return [str substringToIndex:length];
}
if (start < 0 && length > 0)
{
return [[str substringFromIndex:str_len+start] substringToIndex:length];
}
if (start > 0 && length > 0)
{
return [[str substringFromIndex:start] substringToIndex:length];
}
if (start > 0 && length == 0)
{
return [str substringFromIndex:start];
}
if (length < 0)
{
NSString *tmp_str;
if (start < 0)
{
tmp_str = [str substringFromIndex:str_len+start];
}
else
{
tmp_str = [str substringFromIndex:start];
}
NSInteger tmp_str_len = tmp_str.length;
if (tmp_str_len + length <= 0) return @"";
return [tmp_str substringToIndex:tmp_str_len+length];
}
return str;
}
Eine mögliche Lösung könnte die Verwendung regulärer Ausdrücke sein. Schauen Sie sich RegexKit .
Regexp ist fast immer die falsche Lösung. Insbesondere der Abgleich von URLs ist muy schwierig, da die richtige Regexp sehr lang ist. Zum Beispiel ist es schwierig, E-Mail-Adressen zu finden: reguläre-ausdrücke.info/email.html
"Manche Leute denken, wenn sie mit einem Problem konfrontiert werden, "Ich weiß, ich werde reguläre Ausdrücke verwenden." Jetzt haben sie zwei Probleme." regex.info/blog/2006-09-15/247
Wenn Ihre Eingabezeichenkette einfache Garantien hat (zum Beispiel die Garantie, dass Token in der Zeichenkette immer durch ein Leerzeichen abgegrenzt sind), dann teilen Sie das Leerzeichen auf und testen Sie jedes Element auf @"http://"
als Präfix.
NSString *input = @"abc xyz http://www.example.com aaa bbb ccc";
NSArray *parts = [input componentsSeparatedByString:@" "];
for (NSString *part in parts) {
if ([part hasPrefix:@"http://"]) {
// Found it!
}
}
Dies kann je nach den Anforderungen der Anwendung optimiert werden, z. B. indem die Schleife kurzgeschlossen wird, sobald das Element gefunden ist, oder indem Filter in BlocksKit verwendet werden, um nur Elemente zu erhalten, die mit dem Präfix beginnen. Die ideale Lösung hängt von der Art der Eingabezeichenfolge ab und davon, was Sie mit ihr erreichen wollen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.