Wie bekomme ich eine "E" -Ausgabe anstatt 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Hat Golang die Funktion, ein Zeichen in Byte umzuwandeln und umgekehrt?
Interpretierte String-Literale sind Zeichenfolgen zwischen doppelten Anführungszeichen unter Verwendung der (möglicherweise mehrbyteigen) UTF-8-Codierung einzelner Zeichen. In UTF-8 sind ASCII-Zeichen Einzelbyte, die den ersten 128 Unicode-Zeichen entsprechen. Strings verhalten sich wie Byte-Slices. Eine Rune ist ein ganzzahliger Wert, der einen Unicode-Codepunkt identifiziert. Deshalb,
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1])) // ASCII only
fmt.Println(string([]rune("Hello, 世界")[1])) // UTF-8
fmt.Println(string([]rune("Hello, 世界")[8])) // UTF-8
}
Ausgabe:
e
e
界
Lesen:
Gehen Sie zum Abschnitt Programmiersprachenspezifikation unter Konvertierungen .
Kann auch durch Schneiden erfolgen
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
Go hat eigentlich keinen Charaktertyp als solchen. Byte wird häufig für ASCII-Zeichen verwendet, und Rune wird für Unicode-Zeichen verwendet, aber beide sind nur Aliase für Ganzzahltypen (uint8 und int32). Wenn Sie also erzwingen möchten, dass sie als Zeichen anstelle von Zahlen gedruckt werden, müssen Sie sie verwenden Printf("%c", x)
. Die %c
Formatspezifikation funktioniert für jeden Ganzzahltyp.
Die allgemeine Lösung für die Interpretation eines Zeichens als Zeichenfolge lautet string("HELLO"[1])
.
Natürlich funktioniert auch Richs Lösung.
Sie können auch versuchen, es mit einer Zeichenfolge zu typisieren.
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1]))
}
Versuchen Sie dies, um die Zeichen anhand ihres Index zu ermitteln
package main
import (
"fmt"
"strings"
)
func main() {
str := strings.Split("HELLO","")
fmt.Print(str[1])
}
Eine andere Lösung, um ein Zeichen in einer Zeichenfolge zu isolieren
package main
import "fmt"
func main() {
var word string = "ZbjTS"
// P R I N T
fmt.Println(word)
yo := string([]rune(word)[0])
fmt.Println(yo)
//I N D E X
x :=0
for x < len(word){
yo := string([]rune(word)[x])
fmt.Println(yo)
x+=1
}
}
für String-Arrays auch:
fmt.Println(string([]rune(sArray[0])[0]))
// = kommentierte Zeile
len("cafés")
>len([]rune("cafés"))
und möglicherweise die Zeichenfolge bei jeder Iteration für O (n²) neu konvertiertfor _, r := range word { fmt.Printf("%c", r) }
. Tun Sie dies einfach . Wenn Sie wirklich eine Schleife mit einem Index durchführen möchtenfor x := 0; x < limit; x++
. Bitte lernen Sie die Grundlagen einer Sprache, bevor Sie antworten Fragen.