webentwicklung-frage-antwort-db.com.de

Holen Sie sich die Länge eines Strings

Wie erhält man die Länge einer String? Zum Beispiel habe ich eine Variable wie:

var test1: String = "Scott"

Ich kann jedoch anscheinend keine Längenmethode in der Zeichenfolge finden.

729
Scott Walter

Ab Swift 4

Es ist nur:

test1.count

auf Grund.

(Danke an Martin R)

Ab Swift 2:

Mit Swift 2 hat Apple globale Funktionen in Protokollerweiterungen geändert, Erweiterungen, die jedem Typ entsprechen, der einem Protokoll entspricht. Die neue Syntax lautet also:

test1.characters.count

(Danke an JohnDifool für die Köpfe nach oben)

Ab Swift 1

Verwenden Sie die Count-Character-Methode:

let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
println("unusualMenagerie has \(count(unusualMenagerie)) characters")
// prints "unusualMenagerie has 40 characters"

direkt aus dem Apple Swift Guide

(Beachten Sie, dass für Versionen von Swift vor 1.2 dies stattdessen countElements(unusualMenagerie) ist.)

für deine Variable wäre es

length = count(test1) // was countElements in earlier versions of Swift

Oder Sie können test1.utf16count verwenden

1189
milesper

TLDR:

Für Swift 2.0 und 3.0 verwenden Sie test1.characters.count. Es gibt jedoch ein paar Dinge, die Sie wissen sollten. Lesen Sie weiter.

Zeichen zählen in Swift

Vor Swift 2.0 war count eine globale Funktion. Ab Swift 2.0 kann es als Memberfunktion aufgerufen werden.

test1.characters.count

Es wird die tatsächliche Anzahl der Unicode-Zeichen in einer String zurückgegeben. Es ist also die richtigste Alternative in dem Sinne, dass Sie beim Drucken der Zeichenfolge und der Anzahl der Zeichen von Hand dasselbe Ergebnis erhalten würden.

Aufgrund der Art und Weise, wie Strings in Swift implementiert wird, verbrauchen Zeichen jedoch nicht immer denselben Speicherplatz. Beachten Sie, dass sich dies ganz anders verhält als in anderen Sprachen. 

Beispielsweise können Sie auch test1.utf16.count verwenden.

Wie unten erwähnt, ist der zurückgegebene Wert jedoch nicht unbedingt derselbe wie beim Aufruf von count für characters.

Aus der Sprachreferenz:

Erweiterte Graphem-Cluster können aus einem oder mehreren Unicode-Zeichen bestehen Skalare. Dies bedeutet, dass verschiedene Zeichen - und unterschiedliche Darstellungen desselben Zeichens können unterschiedliche Beträge von .__ erfordern. Speicher zum Speichern. Aus diesem Grund benötigen Zeichen in Swift nicht jeweils Speicherplatz in der Darstellung eines Strings Als ein Als Ergebnis kann die Anzahl der Zeichen in einer Zeichenfolge nicht berechnet werden ohne den String zu durchlaufen, um das erweiterte Graphem-Cluster-Grenzen. Wenn Sie besonders lange arbeiten Zeichenfolgenwerte Beachten Sie, dass die Zeichen-Eigenschaft über .__ durchlaufen muss. die Unicode-Skalare in der gesamten Zeichenfolge, um die Zeichen für diese Zeichenfolge.

Die Anzahl der von der characters-Eigenschaft zurückgegebenen Zeichen ist nicht Immer dasselbe wie die length -Eigenschaft eines NSStrings, der .__ enthält. die gleichen Zeichen Die Länge eines NSStrings basiert auf der Nummer 16-Bit-Code-Einheiten innerhalb der UTF-16-Darstellung des Strings und nicht Die Anzahl der erweiterten Unicode-Graphem-Cluster innerhalb der Zeichenfolge.

Ein Beispiel, das die oben beschriebene Situation perfekt veranschaulicht, ist das Überprüfen der Länge einer Zeichenfolge, die ein einzelnes Emoji-Zeichen enthält, wie in den Kommentaren in n00neimp0rtant angegeben.

var emoji = "????"
emoji.characters.count             //returns 1
emoji.utf16.count                  //returns 2
332
Cezar

Swift 1.2 Update: Es gibt keine Zähler mehr für das Zählen der Größe von Sammlungen. Verwenden Sie einfach die Zählfunktion als Ersatz: count ("Swift")

Swift 2.0, 3.0 und 3.1: 

let strLength = string.characters.count </ strike>

Swift 4.2 (ab 4.0): [Apple-Dokumentation - Zeichenfolgen]

lassen Sie strLength = string.count

90
San
let str = "Hello"
let count = str.length    // returns 5 (Int)

extension String {
    var length: Int { return countElements(self) }  // Swift 1.1
}
extension String {
    var length: Int { return count(self)         }  // Swift 1.2
}
extension String {
    var length: Int { return characters.count    }  // Swift 2.0
}
extension String {
    var length: Int { return self.count }           // Swift 4.2
}
58
whitneyland

Swift 4

"string".count

;)

Swift 3

extension String {
    var length: Int {
        return self.characters.count
    }
}

verwendungszweck

"string".length

46
Vyacheslav

Wenn Sie nur versuchen zu sehen, ob eine Zeichenfolge leer ist oder nicht (Prüfung auf Länge von 0), bietet Swift eine einfache boolesche Testmethode für String an.

myString.isEmpty

Die andere Seite dieser Münze waren die Leute, die in ObjectiveC fragten, wie sie fragen könnten, ob eine Zeichenfolge leer sei, wo die Antwort auf eine Länge von 0 lautete:

NSString ist leer

tl; dr Wenn Sie die Länge eines String-Typs als Anzahl der vom Menschen lesbaren Zeichen definieren möchten, verwenden Sie countElements (). Wenn Sie die Länge anhand der Anzahl von erweiterten Graphemclustern ermitteln möchten, verwenden Sie endIndex. Lesen Sie weiter für Details.

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

In Übereinstimmung mit CollectionType, das wiederum mit _CollectionType konform ist, implementiert String auch startIndex und endIndex berechnete Eigenschaften, die eigentlich die Position des Indexes vor des ersten Zeichenclusters und die Position des Index nach des letzten Zeichenclusters darstellen. In der Zeichenfolge "ABC" ist die Position des Indexes vor A 0 und nach C 3. Daher ist endIndex3, was auch die Länge der Zeichenfolge ist.

Also kann endIndex verwendet werden, um die Länge eines beliebigen String-Typs zu ermitteln.

Nun, nicht immer ... Unicode-Zeichen sind eigentlich _ = erweiterte Graphem-Cluster. Dies sind Sequenzen von einem oder mehr Unicode-Skalaren, die zu einem einzelnen, vom Menschen lesbaren Zeichen kombiniert werden.

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

circledStar ist ein einzelnes Zeichen, bestehend aus U + 2606 (ein weißer Stern) und U + 20DD (ein kombinierender umschließender Kreis). Erstellen wir ein String aus circledStar und vergleichen Sie die Ergebnisse von countElements () und endIndex.

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

In Swift 2.0 funktioniert count nicht mehr. Sie können dies stattdessen verwenden:

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

Hier ist etwas kürzer und natürlicher als das Verwenden einer globalen Funktion:

aString.utf16count

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

14
Jean Le Moignan

Für Xcode 6 Beta 4 aktualisiert, Methode utf16count ändern -> utf16Count

 var test1: String = "Scott"
 var length =  test1.utf16Count

Oder

 var test1: String = "Scott"
 var length = test1.lengthOfBytesUsingEncoding(NSUTF16StringEncoding)
10
Kiet Nguyen

Ab Swift 1.2 wurde utf16Count entfernt. Sie sollten jetzt die globale Funktion count() verwenden und die UTF16-Ansicht der Zeichenfolge übergeben. Beispiel unten ...

let string = "Some string"
count(string.utf16)
10
Jeremy Fox

Für XCode 7.3 und Swift 2.2.

let str = "????"

1) Wenn Sie die Anzahl der visuellen Zeichen wünschen:

str.characters.count // 1

2) Wenn Sie den 16-bit code units within the string’s UTF-16 representation wünschen:

str.utf16.count // 2



Meistens ist 1) das, was Sie brauchen.

Wann brauchst du 2)? Ich habe einen Anwendungsfall für 2) gefunden:

let regex = try! NSRegularExpression(pattern:"????", 
    options: NSRegularExpressionOptions.UseUnixLineSeparators)
let str = "????????????????????????"
let result = regex.stringByReplacingMatchesInString(str, 
    options: NSMatchingOptions.WithTransparentBounds, 
    range: NSMakeRange(0, str.utf16.count), withTemplate: "dog")
print(result) // dogdogdogdogdogdog

Wenn Sie 1) verwenden, ist das Ergebnis falsch:

let result = regex.stringByReplacingMatchesInString(str, 
    options: NSMatchingOptions.WithTransparentBounds, 
    range: NSMakeRange(0, str.characters.count), withTemplate: "dog")
print(result) // dogdogdog????????????
7
Tyler Long

Du könntest es so versuchen 

var test1: String = "Scott"
var length =  test1.bridgeToObjectiveC().length
7
Anil Varghese

in Swift 2.x können Sie die Länge einer Zeichenfolge ermitteln

let findLength = "This is a string of text"
findLength.characters.count

gibt 24 zurück

6
Adam

Swift 2.0: Holen Sie sich eine Zählung: yourString.text.characters.count

Ein interessantes Beispiel, wie dies nützlich ist, wäre das Anzeigen eines Zeichen-Countdowns von einer beliebigen Zahl (beispielsweise 150) in einer UITextView:

func textViewDidChange(textView: UITextView) {
    yourStringLabel.text = String(150 - yourStringTextView.text.characters.count)
}
5
cjd

Schnell 4.2

let flag = "????????"

print(flag.count)
// Prints "1" --  Counts the characters and emoji as length 1

print(flag.unicodeScalars.count)
// Prints "2" --  Counts the unicode lenght ex. "A" is 65

print(flag.utf16.count)
// Prints "4"

print(flag.utf8.count)
// Prints "8"
4
Saranjith

In Swift4 habe ich immer string.count verwendet, bis ich das gefunden habe 

string.endIndex.encodedOffset

ist die bessere Substitution, weil sie schneller ist - für 50 000 Zeichen ist die Zeichenkette etwa 6 Mal schneller als .count. Der .count hängt von der Stringlänge ab, .endIndex.encodedOffset jedoch nicht. 

Aber es gibt ein NEIN. Es ist nicht gut für Zeichenfolgen mit Emojis, es wird ein falsches Ergebnis ausgegeben, daher ist nur .count korrekt. 

3
VYT

Im Schnell 4 : Wenn die Zeichenfolge keine Unicode-Zeichen enthält, verwenden Sie Folgendes 

let str : String = "abcd"
let count = str.count // output 4

Wenn die Zeichenfolge Unicode-Zeichen enthält, verwenden Sie Folgendes:

let spain = "España"
let count1 = spain.count // output 6
let count2 = spain.utf8.count // output 7
3
Ashis Laha

Hier ist, was ich am Ende getan habe

let replacementTextAsDecimal = Double(string)

if string.characters.count > 0 &&
    replacementTextAsDecimal == nil &&
    replacementTextHasDecimalSeparator == nil {
        return false
}
2
Bryan Clark

Stringwert aus Ihrer Textansicht oder Ihrem Textfeld abrufen:

let textlengthstring = (yourtextview?.text)! as String

Ermitteln Sie die Anzahl der Zeichen in der Zeichenfolge:

let numberOfChars = textlength.characters.count
2
kalyan711987

In Xcode 6.1.1 

extension String {    
    var length : Int { return self.utf16Count  }
}

Ich denke, dass Gehirnarbeiter dies in jeder kleineren Version ändern werden.

2
user3812138

Schnell 4

let str =  "Your name"

str.count 

Denken Sie daran: In der Anzahl wird auch Platz berücksichtigt 

2
Mr.Shin

Sie erhalten die Länge einfach, indem Sie eine Erweiterung schreiben:

extension String {
    // MARK: Use if it's Swift 2
    func stringLength(str: String) -> Int {
        return str.characters.count
    }

    // MARK: Use if it's Swift 3
    func stringLength(_ str: String) -> Int {
        return str.characters.count
    }

    // MARK: Use if it's Swift 4
    func stringLength(_ str: String) -> Int {
        return str.count
    }
}
2
Riajur Rahman

Apple hat es von anderen Hauptsprachen unterschieden. Der aktuelle Weg ist zu rufen:

test1.characters.count

Um jedoch vorsichtig zu sein, wenn Sie Länge sagen, meinen Sie die Anzahl der Zeichen und nicht die Anzahl der Bytes, da diese beiden Werte bei Verwendung von Nicht-ASCII-Zeichen unterschiedlich sein können.

Zum Beispiel; "你好啊hi".characters.count gibt Ihnen 5, aber dies ist nicht die Anzahl der Bytes . Um die tatsächliche Anzahl der Bytes zu ermitteln, müssen Sie "你好啊hi".lengthOfBytes(using: String.Encoding.utf8) ausführen. Dies gibt Ihnen 11.

1
Frank

Jetzt (in Swift 2.3), wenn Sie Folgendes verwenden:

myString.characters.count 

die Methode gibt einen "Distance" -Typ zurück. Wenn Sie die Methode benötigen, um eine Ganzzahl zurückzugeben, geben Sie cast wie folgt ein:

var count = myString.characters.count as Int
1
Jesse

meine zwei Cents für Swift 3/4

Wenn Sie bedingt kompilieren müssen

    #if Swift(>=4.0)
            let len = text.count
        #else
            let len = text.characters.count
        #endif
1
ingconti

Der beste Weg, String in Swift zu zählen, ist folgender:

var str = "Hello World"
var length = count(str.utf16)
1
Zaldy

Swift 4-Update im Vergleich zu Swift 3

Mit Swift 4 ist kein Zeichenarray für String erforderlich. Dies bedeutet, dass Sie count für eine Zeichenfolge direkt aufrufen können, ohne zuerst das Zeichenarray zu erhalten.

"hello".count                  // 5

In Swift 3 müssen Sie jedoch das Zeichenfeld und dann das Element in diesem Feld zählen. Beachten Sie, dass die folgende Methode in Swift 4.0 weiterhin verfügbar ist, da Sie weiterhin characters aufrufen können, um auf das Zeichenarray der angegebenen Zeichenfolge zuzugreifen

"hello".characters.count       // 5

Swift 4.0 verwendet auch Unicode 9 und kann jetzt Graphem-Cluster interpretieren. Wenn Sie beispielsweise auf ein Emoji zählen, erhalten Sie 1, während Sie in Swift 3.0 Zählungen über 1 erhalten.

"????????".count // Swift 4.0 prints 1, Swift 3.0 prints 2
"????‍❤️‍????‍????".count // Swift 4.0 prints 1, Swift 3.0 prints 4
1
Fangming
var str = "Hello, playground"
var newString = str as NSString    

countElements(str)

Dies zählt die Zeichen in Regular Swift String

countElements((newString as String))    

Dies zählt die Zeichen in einem NSS-String

1
brokenrhino

String und NSString sind gebührenfreie Bridge, sodass Sie alle für NSString verfügbaren Methoden mit Swift String verwenden können

let x = "test" as NSString
let y : NSString = "string 2"
let lenx = x.count
let leny = y.count
1
Tien Dinh
test1.characters.count

erhalten Sie die Anzahl der Buchstaben/Zahlen usw. in Ihrer Zeichenfolge.

ex:

test1 = "StackOverflow"

print(test1.characters.count)

( druckt "13")

1
Andy Lebowitz
// String literal
let s = "Hello world" 
// Get the length of the string
let length = s.characters.count
print(length) 
0

Universal Swift 4 und 3 Lösung

/**
 * Since Swift 4 There is also native count, But it doesn't return Int
 * NOTE: was: var count:Int { return self.characters.count }
 * EXAMPLE: "abc????".count//Output: 4
 */
extension String{
    var count:Int {
        return self.distance(from: self.startIndex, to: self.endIndex)
    }
}
0
eonist

Sie können str.utf8.count und str.utf16.count verwenden, was meiner Meinung nach die beste Lösung ist

0
euvl

Xcode 6.4 , Swift 1.2 und iOS 8.4 verwenden:

    //: Playground - noun: a place where people can play

    import UIKit

    var str = "  He\u{2606}  "
    count(str) // 7

    let length = count(str.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())) as Int // 3
    println(length == 3) // true
0
King-Wizard

Sie können diese Funktion zu Ihrer Erweiterung hinzufügen

extension NSString { 
    func charLength() -> Int {
        return count(self as String)
    }
}
0
Prakash Raj

Swift 5.0-Zeichenfolgen können als Array einzelner Zeichen behandelt werden. Um die Länge einer Zeichenfolge zurückzugeben, können Sie yourString.count verwenden, um die Anzahl der Elemente im Zeichenarray zu zählen.

0

wenn Sie eine beliebige Stringlänge zählen wollen 

Versuchen Sie es auf ganz einfache Weise:

Für Swift:

var test1: String = "Scott"

Unter der Codezeile ist die Länge der Zeichenfolge zu zählen:

test1.count

oder du kannst es auch versuchen:

test1.characters.count

Möge das dir helfen.

Vielen Dank.

0
Bhaumik Joshi

In Swift 4.1 und Xcode 9.4.1

Länge in Objective C und Swift zu erhalten, ist unterschiedlich. In Obj-c verwenden wir length property, in Swift verwenden wir count property

Beispiel:

//In Swift
let stringLenght = "This is my String"
print(stringLenght.count)

//In Objective C
NSString * stringLenght = @"This is my String";
NSLog(@"%lu", stringLenght.length);
0
iOS

test1.endIndex liefert dasselbe Ergebnis wie test1.characters.count auf Swift 3

0
Thracian

In Swift 4.2 und Xcode 10.1

In Swift können Strings wie ein Array einzelner Zeichen behandelt werden. Jedes Zeichen in einem String ist also wie ein Element in einem Array. Um die Länge eines Strings zu ermitteln, verwenden Sie yourStringName.count property.

In Swift

yourStringName.characters.count Eigenschaft in veraltet. Verwenden Sie also direkt die Eigenschaft strLength.count.

let strLength = "This is my string"
print(strLength.count)
//print(strLength.characters.count) //Error: 'characters' is deprecated: Please use String or Substring directly

Wenn Ziel C

NSString *myString = @"Hello World";
NSLog(@"%lu", [myString length]); // 11
0
iOS