删除Swift中String对象中特定字符后所有字符的更优雅方法是什么

Fro*_*art 25 swift

String在Swift中删除对象中特定字符后删除所有字符的更优雅的方法是什么?

假设我有以下字符串:

str.str

我需要从中删除".str".我该怎么做?

提前致谢.

Kir*_*ins 37

这是一种方法:

var str = "str.str"

if let dotRange = str.rangeOfString(".") {
    str.removeRange(dotRange.startIndex..<str.endIndex)
}
Run Code Online (Sandbox Code Playgroud)

在Swift 3中更新它是:

var str = "str.str"

if let dotRange = str.range(of: ".") {
  str.removeSubrange(dotRange.lowerBound..<str.endIndex)
}
Run Code Online (Sandbox Code Playgroud)


Dom*_*her 23

我认为这是更好的方法:

使用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))
}
Run Code Online (Sandbox Code Playgroud)


Pli*_*kin 18

相当紧凑的方式是:

var str = "str.str"
str = str.componentsSeparatedByString(".")[0]
Run Code Online (Sandbox Code Playgroud)

您可能感兴趣的另一个选项,适用于您的示例'str.str',但不符合您的规范:

str = str.stringByDeletingPathExtension
// Returns a new string made by deleting the extension (if any, and only the last)
// from the `String`
Run Code Online (Sandbox Code Playgroud)

  • 在Swift 4.2中使用`str = str.components(separatedBy:(“。”)[0]`` (3认同)

小智 16

这在 swift 5 中有效并且只需要一行

textString = textString.components(separatedBy: ".")[0]
Run Code Online (Sandbox Code Playgroud)


eon*_*ist 5

斯威夫特 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)
}
Run Code Online (Sandbox Code Playgroud)