Problem: Numerisch ist von unterschiedlicher Länge könnte 1, 200, 1000, 39 99995 usw. sein Und müssen mit einem Text ersetzen z. "Apple" unterscheidet sich von den numerischen Werten.Ersetzen numerische von unterschiedlicher Länge in einer Zeichenfolge mit unterschiedlicher Textlänge
let str: String = "Hallo Ich habe 1313 Objekt von 10 String-Klasse mit 1 Objekt, ähnlich wie 9999 Fehler"
Erwartetes Ergebnis = „Hallo, ich habe Apple- Objekt von Apple- String-Klasse mit Apple- Objekt, ähnlich wie Apple- Fehler“
ich mit folgendem Code versucht:
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)
Wenn ein numerische mit Sonderzeichen wie 10% zugeordnet ist, dann wird dies nicht dieses –
Ja ändern, weil „10%“ kein numerisches Zeichen ist, ist es alphanumerical, und so betrachtet wie ein Faden. Meine Antwort funktioniert durch Trennung von Wörtern mit Leerzeichen - wenn Sie "10%" durch "Apple%" ersetzen möchten, funktioniert meine Antwort nicht mehr *, da dies nicht das ist, was Sie ursprünglich gefragt haben *, Ihre ursprüngliche Frage betraf nur numerische Zeichen . :) Wenn ich über diese Anforderung gewusst hätte, hätte ich meine Antwort nicht gleich gemacht. Wenn Sie wirklich "10%" durch "Apple%" ersetzen müssen, schlage ich vor, dass Sie eine neue Frage mit dieser expliziten Anforderung erstellen (und diese Q & A in der neuen Frage für Informationen referenzieren). – Moritz