Come ottenere un'uscita "E" anziché 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang ha la funzione per convertire un carattere in byte e viceversa?
Come ottenere un'uscita "E" anziché 69?
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1])
}
Golang ha la funzione per convertire un carattere in byte e viceversa?
Risposte:
I valori letterali stringa interpretati sono sequenze di caratteri tra virgolette "" che utilizzano la codifica UTF-8 (possibilmente multibyte) dei singoli caratteri. In UTF-8, i caratteri ASCII sono a byte singolo corrispondenti ai primi 128 caratteri Unicode. Le stringhe si comportano come fette di byte. Una runa è un valore intero che identifica un punto di codice Unicode. Perciò,
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
}
Produzione:
e
e
界
Leggere:
Vai alla sezione Specifiche del linguaggio di programmazione sulle conversioni .
Che ne dici di questo ?
fmt.Printf("%c","HELLO"[1])
Come sottolinea Peter, per consentire più di un semplice ASCII:
fmt.Printf("%c", []rune("HELLO")[1])
Può essere fatto anche tramite affettatura
package main
import "fmt"
func main() {
fmt.Print("HELLO"[1:2])
}
NOTA: questa soluzione funziona solo per i caratteri ASCII.
Go non ha davvero un tipo di carattere in quanto tale. byte viene spesso utilizzato per i caratteri ASCII e rune viene utilizzato per i caratteri Unicode, ma sono entrambi solo alias per i tipi interi (uint8 e int32). Quindi, se vuoi costringerli a essere stampati come caratteri invece che come numeri, devi usare Printf("%c", x)
. La %c
specifica del formato funziona per qualsiasi tipo di numero intero.
Puoi anche provare a digitarlo con string.
package main
import "fmt"
func main() {
fmt.Println(string("Hello"[1]))
}
La soluzione generale per interpretare un carattere come una stringa è string("HELLO"[1])
.
Naturalmente anche la soluzione di Rich funziona.
Un'altra soluzione per isolare un carattere in una stringa
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
}
}
anche per gli array di stringhe:
fmt.Println(string([]rune(sArray[0])[0]))
// = riga commentata
len("cafés")
> len([]rune("cafés"))
e potrebbe riconvertire la stringa a ogni iterazione per, O (n²). Fallo e basta for _, r := range word { fmt.Printf("%c", r) }
. Se vuoi davvero eseguire il loop con un indice for x := 0; x < limit; x++
. Per favore impara le basi di una lingua prima di rispondere domande
"हैलो"[:1]
ti dà