swift - Swift字符串替换并获得新范围
问题描述
字符串替换后检索范围的更好方法?
这是当前版本:
let username = "apple"
msgString = "{{user}} has an apple"
guard let range = msgString.range(of: "{{user}}") else { return }
msgString.replaceSubrange(range, with username)
userRange = msgString.range(of: username)
有没有更好的方法来获取用户名范围
解决方案
我建议你创建一个类来做你多次做的事情
在此类中,您可以使用 replace 方法获取 stringRange 和 newReplacedString :
class StringService {
/** create an object to access every method because this class provides you services */
static let shared = StringService()
/** Service classes should not be available for creating instances */
private init () {}
func replace(mySting: String ,by: String, with: String) -> (String,Range<String.Index>?) {
var newString = ""
if let range = myString.range(of:by) {
newString.replaceSubrange(range,with:with)
return (newString,range)
}esle{
return ("",nil)
}
}
用法 :
let replacedString = StringService.shared.replace(mySting: "myString is",
by: "is",
with: "was").0
if let replacedStringRange = StringService.shared.replace(mySting: "myString is",
by: "is",
with: "was").1 {
}
如果您想使用本机库,您可以使用:
"myString is".replacingOccurrences(of: "is",
with: "was",
options: .literal,
range: nil)
推荐阅读
- regex - 正则表达式匹配 {12} 数字和其他模式,多行,当它们之间可以有任何字符时
- database - 休眠中的 UUID[] 不映射
- javascript - React 子组件中触发效果的最佳模式
- google-cloud-platform - Google Cloud Platform:外部 HTTPS 负载平衡器并在路径重定向/值中使用变量
- c# - 即使列表为空,如何连接 3 个列表?
- c# - 在 Docker 容器中访问 Nuget 包
- java - java - 如何使用Java 8中的每个月的LocalDate来获得每个月有多少个星期五?
- postgresql - libpq 是否支持与 Oracle 的数组绑定等效的东西?
- jupyter-notebook - 在 Google Codelab 中读取文件
- oracle - 使用服务名称而不是 SID 连接到 Oracle 数据库