在Swift中如何替换字符串中的子字符串。

3
我的代码如下所示:
let fileName = "/users/lezi/downloads/Zootopia.srt"
var srtFile = try? String(contentsOfFile: fileName)
let range = srtFile?.range(of: "00:00:59,825")
print(srtFile?[range!])
srtFile?.replaceSubrange(range!, with: "00:00:59,826")
print(srtFile?[range!])

我希望将"00:00:59,825"替换为"00:00:59,826",但打印出来的是"Optional("\r\n\r\n2")\n",在"00:00:59,825"之前有一些字符。


2
无法复现。需要一个(自包含的)[mcve]。 - Martin R
我可以用一个中文的srt文件来复现这个问题,然后在第二个print语句中也会得到一些垃圾输出。不过使用replacingoccurenzces(of:with)似乎可以解决这个问题,所以看起来应该将其视为重复问题并关闭。 - Joakim Danielson
@JoakimDanielson:使用range(of:)replaceSubrange()也应该可以工作(并且与replacingOccurrences(of:with:)不等效)。我认为更有帮助的是弄清楚为什么上述代码不能按预期工作(而不是将其关闭为关于不同方法的重复问题)。 - Martin R
如果我将子字符串更改为"00:00:59,825",两者都不起作用。 - 龙方哲
你将其中哪一个更改以使其不起作用? - Joakim Danielson
显示剩余4条评论
2个回答

4
你可以尝试使用`replacingOccurrences(of:with:)`方法。该方法会返回一个新的字符串,其中接收者中所有目标字符串的出现都被另一个给定的字符串替换掉。
示例代码如下:
let str = "Swift 4.0 is the best version of Swift to learn, so if you're starting fresh you should definitely learn Swift 4.0."
let replaced = str.replacingOccurrences(of: "4.0", with: "5.0")

1
谢谢,但如果这是答案的话,那么问题就是一个重复的 https://dev59.com/d2Af5IYBdhLWcg3w2Vwo 的副本。 - Cœur
使用replacingOccurrences和replaceSubrange都可以工作,但是在执行replaceSubrange之后,获取的范围似乎变得无效了。 - 龙方哲

1
无论用例如何。替换子字符串的通用语法为:
str.replacingOccurrences(of: "replace_this", with: "with_this")

其中replace_this是您想要替换的文本字符串,而```with_this```则是要插入的新子字符串。


1
谢谢,但如果这是答案,那么问题就是一个重复的问题,可以在https://dev59.com/d2Af5IYBdhLWcg3w2Vwo找到答案。 - Cœur
是的,它是String.NSString的一个方法,而不是String的方法。这让查找变得困难! - Worik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接