513 Stimmen

Erhalten Sie das n-te Zeichen eines Strings in Swift

Wie kann ich das n-te Zeichen einer Zeichenkette erhalten? Ich habe es mit dem eckigen Klammern ([]) Operator versucht, aber es hat nicht geklappt.

var string = "Hallo, Welt!"

var firstChar = string[0] // Wirft einen Fehler

FEHLER: 'subscript' ist nicht verfügbar: String kann nicht mit einem Int indiziert werden, siehe den Dokumentationskommentar für weitere Informationen

87voto

Warif Akhand Rishi Punkte 23036

Swift 4

let str = "Mein String"

String bei Index

let index = str.index(str.startIndex, offsetBy: 3)
String(str[index])    // "n"

Teilstring

let startIndex = str.index(str.startIndex, offsetBy: 3)
let endIndex = str.index(str.startIndex, offsetBy: 7)
String(str[startIndex...endIndex])     // "Strin"

Erste n Zeichen

let startIndex = str.index(str.startIndex, offsetBy: 3)
String(str[..

`Letzte n Zeichen

let startIndex = str.index(str.startIndex, offsetBy: 3)
String(str[startIndex...])    // "String"

Swift 2 and 3

str = "Mein String"

String bei Index

Swift 2

let charAtIndex = String(str[str.startIndex.advancedBy(3)])  // charAtIndex = "n"

Swift 3

str[str.index(str.startIndex, offsetBy: 3)]

Teilstring von Index bis Index

Swift 2

let subStr = str[str.startIndex.advancedBy(3)...str.startIndex.advancedBy(7)] // subStr = "Strin"

Swift 3

str[str.index(str.startIndex, offsetBy: 3)...str.index(str.startIndex, offsetBy: 7)]

Erste n Zeichen

let first2Chars = String(str.characters.prefix(2)) // first2Chars = "Me"

Letzte n Zeichen

let last3Chars = String(str.characters.suffix(3)) // last3Chars = "ing"`

35voto

multitudes Punkte 2173

Swift 5.3

Ich finde das sehr elegant. Lob an Paul Hudson von "Hacking with Swift" für diese Lösung:

@available (macOS 10.15, * )
extension String {
    subscript(idx: Int) -> String {
        String(self[index(startIndex, offsetBy: idx)])
    }
}

Um also ein Zeichen aus dem String zu erhalten, machst du einfach folgendes:

var string = "Hallo, Welt!"

var erstesZeichen = string[0] // Kein Fehler, gibt "H" als String zurück

NB: Ich wollte nur hinzufügen, dass dies wie in den Kommentaren erwähnt einen String zurückgibt. Ich denke, dies könnte für Swift-Benutzer überraschend sein, aber oft brauche ich einen String, den ich sofort in meinem Code verwenden kann und nicht einen Character-Typ, sodass es meinen Code ein wenig vereinfacht und eine spätere Konvertierung von Character zu String vermieden wird.

24voto

SoftDesigner Punkte 5376

Wenn Sie Cannot subscript a value of type 'String'... sehen, verwenden Sie diese Erweiterung:

Swift 3

extension String {
    subscript (i: Int) -> Character {
        return self[self.characters.index(self.startIndex, offsetBy: i)]
    }

    subscript (i: Int) -> String {
        return String(self[i] as Character)
    }

    subscript (r: Range) -> String {
        let start = index(startIndex, offsetBy: r.lowerBound)
        let end = index(startIndex, offsetBy: r.upperBound)
        return self[start..) -> String {
        let start = index(startIndex, offsetBy: r.lowerBound)
        let end = index(startIndex, offsetBy: r.upperBound)
        return self[start...end]
    }
}

Swift 2.3

extension String {
    subscript(integerIndex: Int) -> Character {
        let index = advance(startIndex, integerIndex)
        return self[index]
    }

    subscript(integerRange: Range) -> String {
        let start = advance(startIndex, integerRange.startIndex)
        let end = advance(startIndex, integerRange.endIndex)
        let range = start..

`

Quelle: http://oleb.net/blog/2014/07/swift-strings/

`

24voto

Matt Le Fleur Punkte 2609

Swift 2.0 ab Xcode 7 GM Seed

var text = "Hallo, Welt!"

let firstChar = text[text.startIndex.advancedBy(0)] // "H"

Für das n-te Zeichen ersetzen Sie 0 durch n-1.

Bearbeiten: Swift 3.0

text[text.index(text.startIndex, offsetBy: 0)]

n.b. Es gibt einfachere Möglichkeiten, bestimmte Zeichen im String abzurufen

z.B. let firstChar = text.characters.first

19voto

Dan Beaulieu Punkte 18614

Swift 2.2-Lösung:

Die folgende Erweiterung funktioniert in Xcode 7, dies ist eine Kombination aus dieser Lösung und der Umstellung auf die Syntax von Swift 2.0.

extension String {
    subscript(integerIndex: Int) -> Character {
        let index = startIndex.advancedBy(integerIndex)
        return self[index]
    }

    subscript(integerRange: Range) -> String {
        let start = startIndex.advancedBy(integerRange.startIndex)
        let end = startIndex.advancedBy(integerRange.endIndex)
        let range = start..

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X