我想知道如何在某个字符后删除字符串的其余部分。我知道如何替换字符串的出现但不知道如何在某个字符后删除字符串的其余部分。实施例
let names = ["Tommy-normal", "Bob-fat", "Jack-skinny", "Rob-obese"]
for x in names {
print(x.replacingOccurrences(of: "-", with: " "))
}
相反,我想删除 - 之后的其余字符串,以便打印出 Tommy , Bob , Jack 和 Rob
非常感谢任何帮助。
答案 0 :(得分:2)
可能的解决方案是map
,带有闭包
var names = ["Tommy-normal", "Bob-fat", "Jack-skinny", "Rob-obese"]
names = names.map { string -> String in
if let range = string.range(of: "-") {
return string.substring(to: range.lowerBound)
}
return string
}
或者
names = names.map { string -> String in
if let index = string.characters.index(of: "-") {
return string.substring(to: index)
}
return string
}
答案 1 :(得分:0)
你可以拆分成一个数组并取下面的第一个元素:
var names = ["Tommy-normal", "Bob-fat", "Jack-skinny", "Rob-obese"]
for name in names {
let arr = name.components(separatedBy: "-")
print(arr[0])
}
<强>打印强>
托米
鲍勃
杰克
罗布
答案 2 :(得分:0)
你可以试试这个:
let names = ["Tommy-normal", "Bob-fat", "David", "Jack-skinny", "Rob-obese"]; for (let name of names) { let index = name.indexOf("-"); if (index >= 0) name = name.substring(0, index); console.log(name); }
当单词以&#34; - &#34;。
开头时要小心我希望这可以帮到你!
答案 3 :(得分:0)
如果你想使用Sulthan的建议(vadian的第二种方法)来做这件事,但是想要使它略微更通用,你可以创建一个函数,将字符串的第一部分提取到分隔符,然后使用:
func firstPart(of aString: String, separator: String) -> String {
if let range = aString.range(of: separator) {
return aString.substring(to: range.lowerBound)
}
return aString
}
let names = ["Tommy", "Bob-fat", "Jack-skinny", "Rob-obese"]
let firstParts: [String] = names.map {
firstPart(of: $0, separator: "-")
}
print("firstParts = \(firstParts)")
结果如下:
firstParts = ["Tommy", "Bob", "Jack", "Rob"]
您还可以编写将原始数组映射到具有名称部分和“形态”部分的元组的代码:
let tuples = names
.map{$0.components(separatedBy: "-")}
.map{(name:$0[0], morphology: $0.count > 1 ? $0[1] : "unkown morphology")}
tuples.forEach{ print($0.name + " is " + $0.morphology) }
使用我的数据版本,我删除了“Tommy-normal”的“-normal”部分,为了确保代码处理缺少后缀,我得到:
Tommy is unkown morphology
Bob is fat
Jack is skinny
Rob is obese