2017-04-15 130 views
0

我想知道如何在特定字符后删除字符串的其余部分。我知道如何替换字符串的出现,但不知道如何在特定字符后删除字符串的其余部分。例如删除特定字符后的字符串的其余部分

let names = ["Tommy-normal", "Bob-fat", "Jack-skinny", "Rob-obese"] 
for x in names { 
print(x.replacingOccurrences(of: "-", with: " ")) 

}

相反,我想只删除自带字符串后剩下-所以它只是打印出汤米鲍勃Jack and Rob

将不胜感激任何帮助。

+0

查找索引那个字符,把这个前缀加到那个索引上。 – Sulthan

+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 
} 
+0

谢谢瓦迪亚,它的工作原理。你会不会像Sulthan提供的那样知道如何去做?在那里你找到那个字符的索引,把这个前缀加到那个索引 –

+0

这个(第二个例子)实际上就是Sulthan建议的方式。 – vadian

+0

啊好吧谢谢你Vadian。现在我知道两种方式来做到这一点。 :) –

0

你可以分成数组,并采取如下的第一个元素:

var names = ["Tommy-normal", "Bob-fat", "Jack-skinny", "Rob-obese"] 

for name in names { 
let arr = name.components(separatedBy: "-") 
     print(arr[0]) 
} 

打印:

汤米

鲍勃

杰克

罗布

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); 
} 

要小心,当字开头 “ - ”。

我希望这可以帮助你!

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 is unkown morphology 
Bob is fat 
Jack is skinny 
Rob is obese 
相关问题