問題:数字の長さは、1,200,100,39,99995などさまざまです。テキストなどで置き換える必要があります。 "Apple"は数値との相違点が異なる。異なる長さの数値を異なる文字列の文字列に置き換えます。
LET列str:文字列=「こんにちは9999個のエラーに似て1つのオブジェクトと10文字列クラスの持っている1313オブジェクト、」
期待される結果=「こんにちは私はアップル文字列クラスのアップルオブジェクトを持っています
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%」は数字ではないので、それは英数字であり、したがって同様に考えられ、そして、これははい、この1 –
は変更されません、10%などの特殊文字に関連付けられている場合文字列。私の答えはスペースで単語を区切って動作します - あなたが "Apple%"で "10%"を置き換えたい場合、私の答えはもはや働かない*これはあなたがもともと尋ねたものではないので* 。 :)もし私がこの要件について知っていたら、私は同じ答えをしていないでしょう。 「10%」を「Apple%」で置き換える必要がある場合は、この明示的な要件で新しい質問を作成することをお勧めします(情報の新しい質問でこのQ&Aを参照してください)。 – Moritz