Каков более элегантный способ удаления всех символов после определенного символа в объекте String в Swift
Каков более элегантный способ удаления всех символов после определенного символа в объекте String
в Swift?
Предположим, что у меня есть следующая строка:
str.str
и мне нужно удалить из него ".str". Как я могу это сделать?
Спасибо заранее.
Ответы
Ответ 1
Вот как это сделать:
var str = "str.str"
if let dotRange = str.rangeOfString(".") {
str.removeRange(dotRange.startIndex..<str.endIndex)
}
Обновление
В Swift 3 это:
var str = "str.str"
if let dotRange = str.range(of: ".") {
str.removeSubrange(dotRange.lowerBound..<str.endIndex)
}
Ответ 2
Я думаю, что это лучший подход:
Обновление с помощью Swift 4:
(подстрока теперь устарела)
let smth = "element=value"
if let index = (smth.range(of: "=")?.upperBound)
{
//prints "value"
let afterEqualsTo = String(smth.suffix(from: index))
//prints "element="
let beforeEqualsToContainingSymbol = String(smth.prefix(upTo: index))
}
if let index = (smth.range(of: "=")?.lowerBound)
{
//prints "=value"
let afterEqualsToContainingSymbol = String(smth.suffix(from: index))
//prints "element"
let beforeEqualsTo = String(smth.prefix(upTo: index))
}
Ответ 3
Довольно компактный способ:
var str = "str.str"
str = str.componentsSeparatedByString(".")[0]
Еще один вариант, который может вас заинтересовать, который работает для вашего примера "str.str", но не соответствует вашей спецификации:
str = str.stringByDeletingPathExtension
// Returns a new string made by deleting the extension (if any, and only the last)
// from the `String`
Ответ 4
Swift 5.1 🔸
/**
* Splits a string at the first occurrence of a delimiter string
* ## Examples:
* splitAtFirst(str: "element=value", delimiter: "=") // "element", "value"
*/
public static func splitAtFirst(str: String, delimiter: String) -> (a: String, b: String)? {
guard let upperIndex = (str.range(of: delimiter)?.upperBound), let lowerIndex = (str.range(of: delimiter)?.lowerBound) else { return nil }
let firstPart: String = .init(str.prefix(upTo: lowerIndex))
let lastPart: String = .init(str.suffix(from: upperIndex))
return (firstPart, lastPart)
}