Замените только первый экземпляр подстроки в NSString
Итак, если у вас есть NSString, который идет:
@"My blue car is bigger than my blue shoes or my blue bicycle";
Мне нужен метод, который заменяет только первый экземпляр синего цвета зеленым, чтобы создать:
@"My green car is bigger than my blue shoes or my blue bicycle";
Как это сделать?
Ответы
Ответ 1
Предполагая следующие входы:
NSString *myString = @"My blue car is bigger then my blue shoes or my blue bicycle";
NSString *original = @"blue";
NSString *replacement = @"green";
Алгоритм довольно прост:
NSRange rOriginal = [myString rangeOfString:original];
if (NSNotFound != rOriginal.location) {
myString = [myString stringByReplacingCharactersInRange:rOriginal withString:replacement];
}
Ответ 2
SWIFT 3 и 4 ОБНОВЛЕНИЕ:
extension String
{
func stringByReplacingFirstOccurrenceOfString(
target: String, withString replaceString: String) -> String
{
if let range = self.range(of: target) {
return self.replacingCharacters(in: range, with: replaceString)
}
return self
}
}
Ответ 3
В Swift полезно extends String следующим образом:
public extension String {
func stringByReplacingFirstOccurrenceOfString(target: String, withString replaceString: String) -> String {
if let range = self.rangeOfString(target) {
return self.stringByReplacingCharactersInRange(range, withString: replaceString)
}
return self
}
}
Таким образом вы можете позвонить где угодно:
let s = "The red red cat".stringByReplacingFirstOccurrenceOfString("red", withString: "fat")
print(s) // "The fat red cat"
Ответ 4
Версия Swift 4:
func replacingFirstOccurrence(of string: String, with replacement: String) -> String {
guard let range = self.range(of: string) else { return self }
return replacingCharacters(in: range, with: replacement)
}
Ответ 5
NSString *initialString = @"My blue car is bigger then my blue shoes or my blue bicycle";
NSRange range = [initialString rangeOfString:@"blue"];
NSString *replacedString = [initialString stringByReplacingCharactersInRange:range withString:@"green"];
NSLog(@"replacedString: %@", replacedString);
Ответ 6
Сначала найдите подстроку, а затем выполните замену. Пример:
NSString *aString = @"foo bar foo";
NSRange firstFooRange = [aString rangeOfString:@"foo"];
NSString *anotherString = [aString stringByReplacingOccurrencesOfString:@"foo"
withString:@"bar"
options:0
range:firstFooRange];
NSString документация.
Ответ 7
-(NSString*) replaceFirstOccuarnceFromString: (NSString*)input withOriginal:(NSString*) original AndReplacment:(NSString*)replacement
{
NSRange rOriginal = [input rangeOfString: original];
if (NSNotFound != rOriginal.location) {
input = [input
stringByReplacingCharactersInRange: rOriginal
withString: replacement];
}
return input;
}
Ответ 8
Более Swift'ы версии реализации размещены здесь. Этот соответствует синтаксису replacingOccurrences(of:with:)
в Swift 5.1
extension String
{
func replacingFirstOccurrence(of target: String, with replacement: String) -> String
{
if let range = self.range(of: target) {
return self.replacingCharacters(in: range, with: replacement)
}
return self
}
}