Swift : How to get the string before a certain character?

前端 未结 11 1876
北恋
北恋 2020-12-24 01:45

How do I get the string before a certain character in swift? The code below is how I did it in Objective C, but can\'t seem to perform the same task in Swift. Any tips or su

相关标签:
11条回答
  • 2020-12-24 02:12

    Use componentsSeparatedByString() as shown below:

    var delimiter = " "
    var newstr = "token0 token1 token2 token3"
    var token = newstr.components(separatedBy: delimiter)
    print (token[0])
    

    Or to use your specific case:

    var delimiter = " token1"
    var newstr = "token0 token1 token2 token3"
    var token = newstr.components(separatedBy: delimiter)
    print (token[0])
    
    0 讨论(0)
  • 2020-12-24 02:12

    Swift 5 extensions

    extension String {
        func stringBefore(_ delimiter: Character) -> String {
            if let index = firstIndex(of: delimiter) {
                return String(prefix(upTo: index))
            } else {
                return ""
            }
        }
        
        func stringAfter(_ delimiter: Character) -> String {
            if let index = firstIndex(of: delimiter) {
                return String(suffix(from: index).dropFirst())
            } else {
                return ""
            }
        }
    }
    
    let str = "n1:lolz"
    print(str.stringBefore(":")) // n1
    print(str.stringAfter(":")) // lolz
    
    let str = "n1:"
    print(str.stringBefore(":")) // n1
    print(str.stringAfter(":")) // empty string
    
    let str = "n1+lolz"
    print(str.stringBefore(":")) // empty string
    print(str.stringAfter(":")) // empty string
    

    This should be fine tuned for your needs and edge cases.

    0 讨论(0)
  • 2020-12-24 02:13

    To mutate a String into the part until the first appearance of a specified String you could extend String like this:

    extension String {
    
        mutating func until(_ string: String) {
            let components = self.components(separatedBy: string)
            self = components[0]
        }
    
    }
    

    This can be called like this then:

    var foo = "Hello Swift"
    foo.until(" Swift") // foo is now "Hello"
    
    0 讨论(0)
  • 2020-12-24 02:17

    You could use the method prefix(upTo:) in Swift 4 or above

    var string = "hello Swift"
    if let index = string.firstIndex(of: " ") {
        let firstPart = string.prefix(upTo: index)
        print(firstPart) // print hello
    }
    
    0 讨论(0)
  • 2020-12-24 02:17

    My 2 cents :-) using Swift 3.0, similar to PHP strstr

    extension String {
    
        func strstr(needle: String, beforeNeedle: Bool = false) -> String? {
            guard let range = self.range(of: needle) else { return nil }
    
            if beforeNeedle {
                return self.substring(to: range.lowerBound)
            }
    
            return self.substring(from: range.upperBound)
        }
    
    }
    

    Usage1

    "Hello, World!".strstr(needle: ",", beforeNeedle: true) // returns Hello
    

    Usage2

    "Hello, World!".strstr(needle: " ") // returns World!
    
    0 讨论(0)
  • 2020-12-24 02:31

    Following up on Syed Tariq's answer: If you only want the string before the delimiter (otherwise, you receive an array [String]):

    var token = newstr.components(separatedBy: delimiter).first
    
    0 讨论(0)
提交回复
热议问题