Ich stieß auf folgendes Verhalten:
Der Aufruf der iNSString-Instanzenmethode -rangeOfString:@">" options:0 range:<aRange> überliest das gesuchte Zeichen '>', wenn dem Zeichen eines der beiden Unicode-Zeichen (U+200C oder U+200D) folgt.
Da Instanzen der Klasse NSScanner die Methode bei -scanString:intoString: und -scanUptoString:intoString: verwenden zeigen auch sie dieses Verhalten.
IST DIES KORREKT ?
Beispiel1:
NSScanner *scanner = [NSScanner scannerWithString:@"<span>\u200C …"];
[scanner scanUpToString:@">" intoString:NULL]; // Findet scanner das Zeichen nicht, so liest er alles ein.
if([scanner isAtEnd])
NSLog(@"NSScanner-Instanz überliest \'>\', wenn ihm das Zeichen U+200C folgt.");
Beispiel2:
NSScanner *scanner = [NSScanner scannerWithString:@"<span>\u200D …"];
NSRange rg = [[scanner string] rangeOfCharacterFromSet:[NSCharacter characterSetWithCharacterInString:@">"]];
[scanner setScanLocation:rg.location];
if(![scanner scanString:@">" intostring:NULL])
NSLog(@"NSScanner-Instanz findet \'>\' nicht, wenn ihm das Zeichen U+200D folgt.");
Der Aufruf der iNSString-Instanzenmethode -rangeOfString:@">" options:0 range:<aRange> überliest das gesuchte Zeichen '>', wenn dem Zeichen eines der beiden Unicode-Zeichen (U+200C oder U+200D) folgt.
Da Instanzen der Klasse NSScanner die Methode bei -scanString:intoString: und -scanUptoString:intoString: verwenden zeigen auch sie dieses Verhalten.
IST DIES KORREKT ?
Beispiel1:
NSScanner *scanner = [NSScanner scannerWithString:@"<span>\u200C …"];
[scanner scanUpToString:@">" intoString:NULL]; // Findet scanner das Zeichen nicht, so liest er alles ein.
if([scanner isAtEnd])
NSLog(@"NSScanner-Instanz überliest \'>\', wenn ihm das Zeichen U+200C folgt.");
Beispiel2:
NSScanner *scanner = [NSScanner scannerWithString:@"<span>\u200D …"];
NSRange rg = [[scanner string] rangeOfCharacterFromSet:[NSCharacter characterSetWithCharacterInString:@">"]];
[scanner setScanLocation:rg.location];
if(![scanner scanString:@">" intostring:NULL])
NSLog(@"NSScanner-Instanz findet \'>\' nicht, wenn ihm das Zeichen U+200D folgt.");