Задача: Числовая длина может быть 1, 200, 1000, 39 99995 и т. Д. И нужно заменить текстом, например. «Apple», которая отличается от числа, совпадающего с числовыми значениями.Заменить число разной длины в строке с разной длиной текста
пусть ул: String = «Привет я 1313 объект из 10 строк класса с 1 объект, похожий на 9999 ошибки»
Ожидаемый результат = «Привет у меня есть Apple, объект Apple, строка класса с Apple, объект, похожий на Apple, ошибки»
Я пробовал с ниже код:
var originalString: String = "hello i have 1313 object of 10 string class with 1 object, similar to 9999 errors"
let strippedString: NSMutableString = NSMutableString(capacity: originalString.characters.count)
var numArray: [String] = []
var locArray: [NSNumber] = []
var scanner: NSScanner = NSScanner(string:originalString)
let numbers: NSCharacterSet = NSCharacterSet(charactersInString: "")
while scanner.atEnd == false {
var buffer: NSString?
if scanner.scanCharactersFromSet(numbers, intoString: &buffer) {
strippedString.appendString(buffer! as String)
numArray.append(buffer! as String)
locArray.append(scanner.scanLocation)
}
else {
scanner.scanLocation = (scanner.scanLocation + 1)
}
}
for (index, _) in numArray.enumerate() {
var loc : Int = Int(locArray[index]) - (String(numArray[index]).characters.count)
let len = String(numArray[index]).characters.count
let dupStr = "Apple"
if(index != 0 && len != dupStr.characters.count)
{
loc = loc + (dupStr.characters.count - len) + 1
}
originalString.replaceRange(originalString.startIndex.advancedBy(loc)..<originalString.startIndex.advancedBy(loc + len), with: dupStr)
}
print(originalString)
Если числовая связано с особым характером, как 10%, то это не изменит это один –
Да потому, что «10%» не числовой характер, это буквенно-цифровой, и, таким образом, рассматривается как строка. Мой ответ работает, разделяя слова пространством - если вы хотите заменить «10%» на «Apple%», тогда мой ответ больше не работает *, потому что это не то, что вы задали первоначально *, ваш исходный вопрос касался только числовых символов , :) Если бы я знал об этом требовании, я бы не ответил так же. Если вам действительно нужно заменить «10%» на «Apple%», то я предлагаю вам создать новый вопрос с этим явным требованием (и указать этот вопрос и вопрос в новом вопросе для информации). – Moritz