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

1voto

Erik Punkte 12570

Der Typ String von Swift bietet keine Methode characterAtIndex, da eine Unicode-Zeichenfolge auf verschiedene Arten codiert sein könnte. Verwenden Sie UTF8, UTF16 oder etwas anderes?

Sie können auf die CodeUnit-Sammlungen zugreifen, indem Sie die Eigenschaften String.utf8 und String.utf16 abrufen. Sie können auch auf die UnicodeScalar-Sammlung zugreifen, indem Sie die Eigenschaft String.unicodeScalars abrufen.

In Anlehnung an die Implementierung von NSString gebe ich einen Typ unichar zurück.

extension String
{
    func characterAtIndex(index:Int) -> unichar
    {
        return self.utf16[index]
    }

    // Ermöglicht uns die Verwendung der Notation String[index]
    subscript(index:Int) -> unichar
    {
        return characterAtIndex(index)
    }
}

let text = "Hallo Swift!"
let firstChar = text[0]

1voto

George Maisuradze Punkte 1844

Es gibt eine Alternative, die im String-Manifest erklärt wird

extension String : BidirectionalCollection {
    subscript(i: Index) -> Character { return characters[i] }
}

1voto

Stephane Paquet Punkte 2200

Mit Zeichen würdest du den Job erledigen. Du kannst den String schnell in ein Array von Zeichen konvertieren, das von den CharacterView Methoden manipuliert werden kann.

Beispiel:

let myString = "Hallo Welt!"
let myChars = myString.characters

(vollständige CharacterView Dokumentation)

(getestet in Swift 3)

1voto

John Pavley Punkte 5316

In Swift 3 ohne Erweiterungen für die String-Klasse, so einfach wie möglich!

let myString = "abcedfg"
let characterLocationIndex = myString.index(myString.startIndex, offsetBy: 3)
let myCharacter = myString[characterLocationIndex]

In diesem Beispiel ist myCharacter "3".

1voto

Joseph Chen Punkte 1520

Ich wollte darauf hinweisen, dass wenn Sie eine große Zeichenkette haben und viele Zeichen daraus zufällig abrufen müssen, Sie möglicherweise die zusätzlichen Speicherkosten in Kauf nehmen und die Zeichenkette in ein Array konvertieren möchten, um eine bessere Leistung zu erzielen:

// Zahlen Sie im Voraus für O(N) Speicher
let chars = Array(veryLargeString.characters)

for i in 0...veryLargeNumber {
    // Nutzen Sie den O(1) Zugriff
    print(chars[i])
}

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