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

7voto

Narayana Punkte 6214

Wir haben ein Index, der hier sehr nützlich sein wird

Aber der String Index wird als String.Index-Parameter übernommen, sodass sich die meisten Leute hier darüber verwirren, wie sie String.Index übergeben, um Details darüber zu erhalten, wie sie String.Index gemäß unseren Anforderungen bilden können, schauen Sie sich bitte die folgende Dokumentation an Apple-Dokumentation

Hier habe ich eine Erweiterungsmethode erstellt, um den n-ten Character in einem String zu erhalten

extension String {
    subscript(i: Int) -> String {
        return  i < count ? String(self[index(startIndex, offsetBy: i)]) : ""
    }
}

Verwendung

let name = "Narayana Rao Routhu"
print(name[11]) //o
print(name[1]) //a
print(name[0]) //N
print(name[30]) //""

Wenn Sie einen Index übergeben, der außerhalb der Grenzen der Zeichenkettenlänge liegt, wird eine leere Zeichenkette zurückgegeben

7voto

user3723247 Punkte 111

Ich hatte gerade dasselbe Problem. Mach einfach das:

var aString: String = "Test"
var aChar: unichar = (aString as NSString).characterAtIndex(0)

5voto

Yodagama Punkte 3305

Bis jetzt ist subscript(_:) nicht verfügbar. Genauso wie wir dies nicht tun können

str[0] 

mit string. Wir müssen "String.Index" bereitstellen. Aber wie können wir unsere eigene Indexnummer auf diese Weise geben, stattdessen können wir verwenden,

string[str.index(str.startIndex, offsetBy: 0)]

5voto

Emre Değirmenci Punkte 737

In Swift 5 ohne Erweiterung auf den String :

var str = "ABCDEFGH"
for char in str {
if(char == "C") { }
}

Der obige Swift-Code entspricht dem Java-Code :

int n = 8;
var str = "ABCDEFGH"
for (int i=0; i

4voto

dfrib Punkte 65037

Swift 4.2 oder später

Bereichs- und Teilbereichssubskription mit String's indices-Eigenschaft

Als Variation von @LeoDabus schöner Antwort können wir eine zusätzliche Erweiterung zu DefaultIndices hinzufügen, mit dem Ziel uns zu ermöglichen, auf die indices-Eigenschaft von String zurückzugreifen, wenn wir die benutzerdefinierten Subskripte (durch auf Int spezialisierte Bereiche und Teilbereiche) für letzteren implementieren.

extension DefaultIndices {
    subscript(at: Int) -> Elements.Index { index(startIndex, offsetBy: at) }
}

// Das Verschieben von index(_:offsetBy:) in eine Erweiterung ermöglicht etwas
// kürzere Implementierungen für diese String-Erweiterungen.
extension String {
    subscript(range: Range) -> SubSequence {
        let start = indices[range.lowerBound]
        return self[start..) -> SubSequence {
        let start = indices[range.lowerBound]
        return self[start...indices[start...][range.count]]
    }
    subscript(range: PartialRangeFrom) -> SubSequence {
        self[indices[range.lowerBound]...]
    }
    subscript(range: PartialRangeThrough) -> SubSequence {
        self[...indices[range.upperBound]]
    }
    subscript(range: PartialRangeUpTo) -> SubSequence {
        self[..

``

Danke @LeoDabus, dass du mich darauf hingewiesen hast, die indices-Eigenschaft als eine (weitere) Alternative für das String-Subskripting zu verwenden!

``

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