Wie bekomme ich die Anzahl der Zeichen in einem String?
Wie kann ich die Anzahl der Zeichen einer Zeichenkette in Gehen?
Zum Beispiel, wenn ich einen string "hello"
sollte die Methode zurück 5
. Ich sah, dass len(str)
gibt die Anzahl der bytes und nicht die Anzahl der Zeichen so len("£")
gibt 2 statt 1, da £ codiert mit zwei bytes in UTF-8.
InformationsquelleAutor der Frage Ammar | 2012-10-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen,
RuneCountInString
aus dem utf8-Paket.dass, wie dargestellt in dieses Skript: die Länge der "Welt" werden könnte 6 (auf Chinesisch: "世界"), aber seine rune Zählung 2:
Phrozen fügt in den Kommentaren:
Tatsächlich, die Sie tun können
len()
über Runen nur durch type-casting.len([]rune("世界"))
drucken2
. Es muß also mindesten in Go 1.3.Und mit CL 108985 (Mai 2018, für die Go-1.11),
len([]rune(string))
ist jetzt optimiert. (Behebt Problem 24923)Der compiler erkennt
len([]rune(string))
Muster automatisch und ersetzt es mit für r := range s nennen.Stefan Steiger Punkte auf den blog-post "Text Normalisierung Gehen"
Was ist ein Charakter?
Über das Paket und seine
Iter
- Typdie tatsächliche Anzahl der "Zeichen" wäre:Hier, nutzt dieser die Unicode Normalization form NFKD "Compatibility Decomposition"
InformationsquelleAutor der Antwort VonC
Es ist ein Weg um die Anzahl der Runen, ohne alle Pakete, die durch die Umwandlung von string []rune als
len([]rune(YOUR_STRING))
:InformationsquelleAutor der Antwort Denis Kreshikhin
Hängt viel von der eigenen definition, was ein "Charakter" ist. Wenn "rune entspricht einem Zeichen" OK für Ihre Aufgabe (in der Regel ist es nicht), dann ist die Antwort von VonC ist perfekt für Sie. Ansonsten sollte es werden wahrscheinlich bemerkt, dass es wenige Situationen, in denen die Anzahl der Runen in eine Unicode-Zeichenfolge ist ein interessanter Wert. Und selbst in diesen Situationen ist es besser, wenn möglich, zu schließen, die zählen beim "durchqueren" der string, wie die Runen, die verarbeitet werden, zu vermeiden Verdoppelung der UTF-8-decode Aufwand.
InformationsquelleAutor der Antwort zzzz
Wenn Sie brauchen, um grapheme Cluster berücksichtigt werden, verwenden Sie regexp-oder unicode-Modul. Zählen Sie die Anzahl der code-Punkte(Runen) oder bytes, die auch benötigt wird, für validaiton da die Länge grapheme cluster ist unbegrenzt. Wenn Sie ausschließen wollen, dass sehr lange Sequenzen, überprüfen Sie, ob die Sequenzen entsprechen stream-safe-text-format.
InformationsquelleAutor der Antwort masakielastic