我试图用两个随机字符(在103个字符中)替换每次出现的空格。问题是每次总是两个相同的字符,如果您看一下代码就很有意义
我对Swift和Xcode还是很陌生,我已经尝试了很多方法,例如使用“ for”循环。
newSentence = passedSentence.replacingOccurrences(of: " ", with: " \(randomArray[Int.random(in: 0...103)]) \(randomArray[Int.random(in: 0...103)]) ")
resultText.text = newSentence
正如我之前说过的,当我希望它每次出现一个空格时都“刷新”时,它始终是两个相同的字符。
答案 0 :(得分:0)
是的,您的行为符合您的代码。 with:
中传递的参数仅执行一次,因此如果它生成“ SX”,它将用于替换passedSentence
中所有出现的“”(空格)。
要获得预期的行为,您必须循环:
var rangeOfEmptyString = passedSentence.range(of: " ")
while rangeOfEmptyString != nil {
let randomModifier = "\(randomArray[Int.random(in: 0...103)])\(randomArray[Int.random(in: 0...103)])"
passedSentence = passedSentence.replacingCharacters(in: rangeOfEmptyString!, with: randomModifier)
rangeOfEmptyString = passedSentence.range(of: " ")
}
答案 1 :(得分:0)
使用map(_:)
方法而非replacingOccurrences(of:with:)
获得所需的结果。
replacingOccurrences(of:with:)
一个新字符串,其中接收者中出现的所有target都是 替换为替换。
它用replacementString
中传递的同一实例替换所有出现,即randomArray[Int.random(in: 0...103) (randomArray[Int.random(in: 0...103)]
仅执行一次,并在string
中用于所有" "
的出现
let passedSentence = "This is a sample sentence"
let newSentence = (passedSentence.map { (char) -> String in
if char == " " {
return " \(randomArray[Int.random(in: 0...103)]) \(randomArray[Int.random(in: 0...103)]) "
}
return String(char)
}).joined()
print(newSentence)
如果您使用的是整个randomArray
,即如果randomArray
包含104 elements i.e. 0...103
,则可以直接在randomArray
上使用randomElement()
在random(in:)
上使用Int
的原因,即
使用
randomArray.randomElement()
代替
randomArray[Int.random(in: 0...103)]
答案 2 :(得分:0)
您应该用数组的不同随机元素替换每个空格。 replacingOccurrences
方法可一次替换所有范围。一对一地获取空间范围,并替换为唯一的随机元素
let randomArray:[String] = ["a","b","c","d"]
var passedSentence = "This is a long text"
var start = passedSentence.startIndex
while let range = passedSentence[start...].rangeOfCharacter(from: .whitespaces),
let random1 = randomArray.randomElement(),
let random2 = randomArray.randomElement() {
let replacementString = " \(random1) \(random2) "
passedSentence.replaceSubrange(range, with: " \(random1) \(random2) ")
start = passedSentence.index(range.upperBound, offsetBy: replacementString.count)
}
print(passedSentence)
要从数组中获取随机元素,请不要使用randomArray[Int.random(in: 0...103)]
。您可以使用randomElement()