In Go stellt das Entfernen von Akzenten aus Strings und deren Konvertierung in ihr nicht akzentuiertes Äquivalent eine besondere Herausforderung dar. Hier finden Sie eine Untersuchung des Problems und eine mögliche Lösung.
Ein Versuch, dieses Problem zu lösen, umfasst die Implementierung einer Funktion basierend auf dem Beispiel in einem Blog mit dem Titel „Performing Magic“. Das Beispiel beinhaltet die Verwendung der Pakete unicode/norm und text/transform.
<code class="go">package main import ( "bytes" "code.google.com/p/go.text/transform" "code.google.com/p/go.text/unicode/norm" "fmt" "unicode" ) func isMn(r rune) bool { return unicode.Is(unicode.Mn, r) // Mn: nonspacing marks } func main() { r := bytes.NewBufferString("Your Śtring") t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC) r = transform.NewReader(r, t) fmt.Println(r) }</code>
Diese Implementierung ist jedoch nicht ohne Einschränkungen. Neuere Versionen von Go (ab 1.5) führen Änderungen ein, die sich auf die Funktionalität auswirken können.
Go 1.5 führte das Runes-Paket ein, das eine praktische Remove-Funktion enthält, die die Arbeit vereinfacht der Akzententfernungsprozess.
<code class="go">func Remove() transform.Transformer</code>
Die Remove-Funktion akzeptiert eine Reihe von Unicode-Kategoriecodes und entfernt alle Runen, die in diese Kategorien fallen, aus der transformierten Zeichenfolge. Um beispielsweise Zeichen ohne Leerzeichen (Mn) zu entfernen, können Sie Folgendes verwenden:
<code class="go">t := transform.Chain(norm.NFD, runes.Remove(runes.In(unicode.Mn)), norm.NFC)</code>
Diese Transformationskette wandelt akzentuierte Zeichen in ihre nicht akzentuierten Äquivalente um, was sie zu einer effektiveren und prägnanteren Lösung für die Akzententfernung in macht Los.
Das obige ist der detaillierte Inhalt vonWie entferne ich effizient Akzente aus Go-Saiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!