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

16voto

drewag Punkte 91541

Die Swift String-Klasse bietet nicht die Möglichkeit, ein Zeichen an einem bestimmten Index abzurufen, aufgrund ihrer nativen Unterstützung für UTF-Zeichen. Die variable Länge eines UTF-Zeichens im Speicher macht es unmöglich, direkt zu einem Zeichen zu springen. Das bedeutet, dass Sie jedes Mal manuell über den String iterieren müssen.

Sie können String erweitern, um eine Methode bereitzustellen, die durch die Zeichen iteriert, bis Ihr gewünschter Index erreicht ist

extension String {
    func characterAtIndex(index: Int) -> Character? {
        var cur = 0
        for char in self {
            if cur == index {
                return char
            }
            cur++
        }
        return nil
    }
}

myString.characterAtIndex(0)!

14voto

Saravit Soeng Punkte 511

Sie können dies tun, indem Sie den String in ein Array umwandeln und ihn durch Angabe eines Index mit einem Subskript abrufen, wie unten dargestellt

var str = "Hallo"
let s = Array(str)[2]
print(s)

12voto

haxgad Punkte 377

Swift 4

String(Array(stringToIndex)[index]) 

Dies ist wahrscheinlich der beste Weg, um dieses Problem einmalig zu lösen. Du möchtest wahrscheinlich zuerst das String als Array casten und dann das Ergebnis wieder als String casten. Andernfalls wird ein Character zurückgegeben anstelle eines Strings.

Beispiel String(Array("HelloThere")[1]) gibt "e" als String zurück.

(Array("HelloThere")[1] gibt "e" als Character zurück.

Swift erlaubt es nicht, auf Strings wie auf Arrays zu indexieren, aber auf diese Weise wird die Aufgabe im Brute-Force-Stil erledigt.

11voto

Frédéric Adda Punkte 5570

Als Randnotiz gibt es einige Funktionen, die direkt auf die Zeichenketten-Repräsentation eines Strings angewendet werden können, wie zum Beispiel:

var string = "Hallo, Welt"
let firstCharacter = string.characters.first // gibt "H" zurück
let lastCharacter = string.characters.last // gibt "t" zurück

Das Ergebnis ist vom Typ Character, aber du kannst es in einen String umwandeln.

Oder das hier:

let reversedString = String(string.characters.reverse())
// gibt "tleW ,ollaH" zurück

:-)

8voto

Linh Dao Punkte 973

Meine sehr einfache Lösung:

Swift 4.1:

let myString = "Test String"
let index = 0
let firstCharacter = myString[String.Index(encodedOffset: index)]

Swift 5.1:

let firstCharacter = myString[String.Index.init(utf16Offset: index, in: myString)]

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