Get nth character of a string in Swift programming language

后端 未结 30 2005
一整个雨季
一整个雨季 2020-11-22 01:26

How can I get the nth character of a string? I tried bracket([]) accessor with no luck.

var string = \"Hello, world!\"

var firstChar = string[         


        
相关标签:
30条回答
  • 2020-11-22 01:35

    I think that a fast answer for get the first character could be:

    let firstCharacter = aString[aString.startIndex]
    

    It's so much elegant and performance than:

    let firstCharacter = Array(aString.characters).first
    

    But.. if you want manipulate and do more operations with strings you could think create an extension..here is one extension with this approach, it's quite similar to that already posted here:

    extension String {
    var length : Int {
        return self.characters.count
    }
    
    subscript(integerIndex: Int) -> Character {
        let index = startIndex.advancedBy(integerIndex)
        return self[index]
    }
    
    subscript(integerRange: Range<Int>) -> String {
        let start = startIndex.advancedBy(integerRange.startIndex)
        let end = startIndex.advancedBy(integerRange.endIndex)
        let range = start..<end
        return self[range]
    }
    

    }

    BUT IT'S A TERRIBLE IDEA!!

    The extension below is horribly inefficient. Every time a string is accessed with an integer, an O(n) function to advance its starting index is run. Running a linear loop inside another linear loop means this for loop is accidentally O(n2) — as the length of the string increases, the time this loop takes increases quadratically.

    Instead of doing that you could use the characters's string collection.

    0 讨论(0)
  • 2020-11-22 01:37

    Swift 2.2 Solution:

    The following extension works in Xcode 7, this is a combination of this solution and Swift 2.0 syntax conversion.

    extension String {
        subscript(integerIndex: Int) -> Character {
            let index = startIndex.advancedBy(integerIndex)
            return self[index]
        }
    
        subscript(integerRange: Range<Int>) -> String {
            let start = startIndex.advancedBy(integerRange.startIndex)
            let end = startIndex.advancedBy(integerRange.endIndex)
            let range = start..<end
            return self[range]
        }
    }
    
    0 讨论(0)
  • 2020-11-22 01:37

    Swift3

    You can use subscript syntax to access the Character at a particular String index.

    let greeting = "Guten Tag!"
    let index = greeting.index(greeting.startIndex, offsetBy: 7)
    greeting[index] // a
    

    Visit https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html

    or we can do a String Extension in Swift 4

    extension String {
        func getCharAtIndex(_ index: Int) -> Character {
            return self[self.index(self.startIndex, offsetBy: index)]
        }
    }
    

    USAGE:

    let foo = "ABC123"
    foo.getCharAtIndex(2) //C
    
    0 讨论(0)
  • 2020-11-22 01:38

    By now, subscript(_:) is unavailable. As well as we can't do this

    str[0] 
    

    with string.We have to provide "String.Index" But, how can we give our own index number in this way, instead we can use,

    string[str.index(str.startIndex, offsetBy: 0)]
    
    0 讨论(0)
  • 2020-11-22 01:39

    You can do it by convert String into Array and get it by specific index using subscript as below

    var str = "Hello"
    let s = Array(str)[2]
    print(s)
    
    0 讨论(0)
  • 2020-11-22 01:40

    Swift 3

    extension String {
    
        public func charAt(_ i: Int) -> Character {
            return self[self.characters.index(self.startIndex, offsetBy: i)]
        }
    
        public subscript (i: Int) -> String {
            return String(self.charAt(i) as Character)
        }
    
        public subscript (r: Range<Int>) -> String {
            return substring(with: self.characters.index(self.startIndex, offsetBy: r.lowerBound)..<self.characters.index(self.startIndex, offsetBy: r.upperBound))
        }
    
        public subscript (r: CountableClosedRange<Int>) -> String {
            return substring(with: self.characters.index(self.startIndex, offsetBy: r.lowerBound)..<self.characters.index(self.startIndex, offsetBy: r.upperBound))
        }
    
    }
    

    Usage

    let str = "Hello World"
    let sub = str[0...4]
    

    Helpful Programming Tips and Tricks (written by me)

    0 讨论(0)
提交回复
热议问题