@@ -1523,16 +1523,24 @@ return !compare; } - (OFArray*)componentsSeparatedByString: (OFString*)delimiter { + return [self componentsSeparatedByString: delimiter + skipEmpty: NO]; +} + +- (OFArray*)componentsSeparatedByString: (OFString*)delimiter + skipEmpty: (BOOL)skipEmpty +{ OFAutoreleasePool *pool; OFMutableArray *array = [OFMutableArray array]; const of_unichar_t *string, *delimiterString; size_t length = [self length]; size_t delimiterLength = [delimiter length]; size_t i, last; + OFString *component; pool = [[OFAutoreleasePool alloc] init]; string = [self unicodeString]; delimiterString = [delimiter unicodeString]; @@ -1549,18 +1557,20 @@ for (i = 0, last = 0; i <= length - delimiterLength; i++) { if (memcmp(string + i, delimiterString, delimiterLength * sizeof(of_unichar_t))) continue; - [array addObject: [self substringWithRange: - of_range(last, i - last)]]; + component = [self substringWithRange: of_range(last, i - last)]; + if (!skipEmpty || ![component isEqual: @""]) + [array addObject: component]; i += delimiterLength - 1; last = i + 1; } - [array addObject: - [self substringWithRange: of_range(last, length - last)]]; + component = [self substringWithRange: of_range(last, length - last)]; + if (!skipEmpty || ![component isEqual: @""]) + [array addObject: component]; [array makeImmutable]; [pool release];