838 Stimmen

Holen Sie sich die Länge eines Strings

Wie erhält man die Länge eines String? Zum Beispiel habe ich eine variable definiert wie:

var test1: String = "Scott"

Ich kann jedoch keine Längenmethode für den String finden.

26voto

Wenn Sie nur überprüfen möchten, ob ein String leer ist oder nicht (Überprüfung der Länge von 0), bietet Swift eine einfache boolesche Testmethode zu String

myString.isEmpty

Die andere Seite dieser Medaille waren Leute, die in ObjectiveC fragten, wie man überprüfen könne, ob ein String leer ist, wobei die Antwort war, auf eine Länge von 0 zu überprüfen:

NSString is empty

23voto

Saranjith Punkte 10319

Swift 5.1, 5

let flag = ""

print(flag.count)
// Gibt "1" aus -- Zählt die Zeichen und Emojis als Länge 1

print(flag.unicodeScalars.count)
// Gibt "2" aus -- Zählt die Unicode-Länge z.B. "A" ist 65

print(flag.utf16.count)
// Gibt "4" aus

print(flag.utf8.count)
// Gibt "8" aus

20voto

Scott Gardner Punkte 8203

tl;dr Wenn Sie die Länge eines Strings in Bezug auf die Anzahl der menschenlesbaren Zeichen erfahren möchten, verwenden Sie countElements(). Wenn Sie die Länge in Bezug auf die Anzahl der erweiterten Graphemcluster wissen möchten, verwenden Sie endIndex. Lesen Sie weiter für Details.

Der String-Typ ist als geordnete Sammlung (d. h. Sequenz) von Unicode-Zeichen implementiert und entspricht dem CollectionType-Protokoll, das dem _CollectionType-Protokoll entspricht, das der Eingabetyp ist, der von countElements() erwartet wird. Daher kann countElements() aufgerufen werden und dabei ein String-Typ übergeben werden, und es wird die Anzahl der Zeichen zurückgegeben.

Allerdings implementiert String auch die berechneten Eigenschaften startIndex und endIndex, die sich auch in CollectionType und damit in _CollectionType befinden, was tatsächlich die Position des Index vor dem ersten Zeichencluster und die Position des Index nach dem letzten Zeichencluster darstellt. So ist in dem String "ABC" die Position des Index vor A 0 und nach C 3. Daher ist endIndex = 3, was auch die Länge des Strings ist.

Kann also endIndex verwendet werden, um die Länge eines beliebigen String-Typs zu erhalten, richtig?

Nun, nicht immer... Unicode-Zeichen sind tatsächlich erweiterte Graphemcluster, die Sequenzen von einem oder mehreren Unicode-Skalaren sind, die kombiniert werden, um ein einzelnes menschenlesbares Zeichen zu erstellen.

let circledStar: Character = "\u{2606}\u{20DD}" // 

circledStar ist ein einzelnes Zeichen, das aus U+2606 (einem weißen Stern) und U+20DD (einem kombinierenden umschließenden Kreis) besteht. Lassen Sie uns einen String aus circledStar erstellen und die Ergebnisse von countElements() und endIndex vergleichen.

let circledStarString = "\(circledStar)"
countElements(circledStarString) // 1
circledStarString.endIndex // 2

18voto

Antoine Punkte 22558

In Swift 2.0 count funktioniert nicht mehr. Du kannst stattdessen das verwenden:

var testString = "Scott"
var length = testString.characters.count

16voto

Jean Le Moignan Punkte 21842

Hier ist etwas kürzeres und natürlicheres als die Verwendung einer globalen Funktion:

aString.utf16count

Ich weiß nicht, ob es in Beta 1 verfügbar ist. Aber es ist definitiv in Beta 2 vorhanden.

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