У меня есть NSString
, как @"12345"
, а другой - @"##-##-#"
. Каков наилучший способ заменить все символы #
в NSString
по одному, чтобы он выглядел как 12-34-5
?Заменить символы в одном NSString на символы из другого NSString
ответ
NSString *original = @"12345";
NSString *toRepl = @"##-##-#";
for (int i = 0; i < original.length; i++) {
unichar c = [original characterAtIndex:i];
for (int j = 0; j < toRepl.length; j++) {
if([toRepl characterAtIndex:j] == '#'){
toRepl = [toRepl stringByReplacingCharactersInRange:NSMakeRange(j, 1) withString:[NSString stringWithFormat:@"%c", c]];
break;
}
}
}
Возвращаемое значение 'characterAtIndex:' не 'char', это' unichar'. Большая разница. И почему вы используете вложенные циклы? Там должен быть только один цикл. – rmaddy
Код работает, я тестировал его ... Извините, если он быстрый и грязный. – davecom
Он работает только в том случае, если исходная строка содержит символы в ограниченном диапазоне, а ваш код ужасно неэффективен. – rmaddy
Решение с одним витком:
NSString *pattern = @"##-##-#";
NSString *fillWith = @"12345";
NSMutableString *result = [pattern mutableCopy];
__block NSUInteger index = 0; // Position into fillWith
// Loop over all characters in pattern:
[pattern enumerateSubstringsInRange:NSMakeRange(0, [pattern length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
if ([substring isEqualToString:@"#"]) {
if (index < [fillWith length]) {
// Replace # by the next character from fillWith:
[result replaceCharactersInRange:substringRange
withString:[fillWith substringWithRange:NSMakeRange(index, 1)]];
index++;
} else {
// Too many #'s in pattern:
*stop = YES;
}
}
}];
NSLog(@"%@", result);
К сожалению, я неправильно понял ваш вопрос:
Вот рабочее решение, которое я испытал.
NSString *string = @"123456";
NSString *string2 = @"##-##-##";
int i = 0;
do {
NSRange rangeOfChar = [string2 rangeOfString:@"-"];
NSLog(@"range %ld %ld",rangeOfChar.location,rangeOfChar.length);
string = [NSString stringWithFormat:@"%@%@%@",[string substringToIndex:rangeOfChar.location+i],@"-",[string substringFromIndex:rangeOfChar.location+i]];
string2 = [string2 stringByReplacingCharactersInRange:rangeOfChar withString:@""];
i++;
} while ([string2 rangeOfString:@"-"].location!=NSNotFound);
Вот моя попытка на этом, одном цикле и без применения тяжелой characterAtIndex
:
NSString *pattern = @"##-##-#";
NSString *replace = @"12345";
NSMutableString *result = [pattern mutableCopy];
NSRange searchRange = NSMakeRange(0, [pattern length]);
NSRange resultRange;
NSString *patternCheck = [pattern stringByReplacingOccurrencesOfString:@"-" withString:@""];
if ([replace length] == [patternCheck length]) {
for (int i = 0; i < [replace length]; i++) {
resultRange = [result rangeOfString:@"#" options:NSCaseInsensitiveSearch range:searchRange];
[result replaceCharactersInRange:resultRange withString:[replace substringWithRange:NSMakeRange(i, 1)]];
}
}
NSLog(@"pattern:%@ replace:%@ result:%@", pattern, replace, result);
напечатает pattern:##-##-# replace:12345 result:12-34-5
- 1. Жирные символы в NSString
- 2. Вставить символы в NSString
- 3. Удалить символы токенов из NSString
- 4. Извлечь символы из объекта NSString
- 5. Удалить недопустимые символы из NSString
- 6. Как удалить символы из NSString?
- 7. удалить последние символы из NSString
- 8. Как заменить замененный NSString некоторые старые символы?
- 9. Как получить символы NSString?
- 10. Как переупорядочить символы NSString?
- 11. Длина NSString - специальные символы
- 12. Подсчитайте разные символы в NSString
- 13. NSString и символы UTF-8
- 14. Признать специальные символы в NSString
- 15. Вычислить символы до% @ в NSString
- 16. Специальные символы в NSString из HTML
- 17. NSString drawInRect перекрывает все символы
- 18. Как удалить символы из NSString и заменить пробелами?
- 19. NSString, кажется, убивает символы Unicode
- 20. Заменить [] скобки в NSString?
- 21. Как сосчитать символы внутри NSString
- 22. Случайные символы в верхнем регистре в NSString
- 23. Как удалить шестнадцатеричные символы из NSString
- 24. Удалить все повторяющиеся символы из NSString
- 25. Как удалить символы '\ U0000fffc' из nsstring ios
- 26. Как удалить эти символы из NSString
- 27. Удалить неанглоязычных символы из NSString (Obj-C)
- 28. Удалить символы после пробела из NSString
- 29. Заменить вхождения NSString с `` `` `` ''
- 30. Как разложить NSString на отдельные символы?
@nhgrif Итерация через '' NSString' с substringWithRange: NSMakeRange (0 , 2)]; 'но это требует, чтобы я знал точное количество символов, что не удобно. –
Вы посмотрели документацию для NSString ??? –
@HotLicks да, сэр и что именно я пропустил? –