Golang文字列の文字にインデックスを付ける方法は?


101

69ではなく「E」出力を取得するにはどうすればよいですか?

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1])
}

Golangには、文字をバイトに、またはその逆に変換する機能がありますか?

回答:


150

解釈される文字列リテラルは、個々の文字の(場合によってはマルチバイト)UTF-8エンコーディングを使用した二重引用符 ""の間の文字シーケンスです。UTF-8では、ASCII文字は最初の128個のUnicode文字に対応するシングルバイトです。文字列はバイトのスライスのように動作します。ルーンは、Unicodeコードポイントを識別する整数値です。したがって、

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
}

出力:

e
e
界

読んだ:

変換に関するプログラミング言語仕様のセクションに移動しますます。

Goブログ:Goの文字列、バイト、ルーン、文字



10

スライスでもできます

package main

import "fmt"

func main() {
    fmt.Print("HELLO"[1:2])
}

注:このソリューションはASCII文字に対してのみ機能します。


これは、1バイトエンコーディングでのみ動作し、しようと"हैलो"[:1]、それはあなたが与える
vladkras

@vladkrasあなたは正しいです。ASCIIでのみ機能します。UTF-8については、承認された回答をご覧ください。また、この情報を使用してソリューションを編集します。
Samkit Jain

7

Goには、実際にはそのような文字タイプはありません。バイトはASCII文字によく使用され、ルーンはUnicode文字に使用されますが、どちらも整数型(uint8およびint32)の単なるエイリアスです。したがって、数字ではなく文字として強制的に印刷する場合は、を使用する必要がありますPrintf("%c", x)%cフォーマット仕様では、任意の整数型のために働きます。


5

文字列で型キャストすることもできます。

package main

import "fmt"

func main() {
    fmt.Println(string("Hello"[1]))
}

4

文字を文字列として解釈するための一般的な解決策は次のとおりです。 string("HELLO"[1])です。

もちろん、Richのソリューションも機能します。


0

これを試して、インデックスで文字を取得してください

package main

import (
      "fmt"
      "strings"
)

func main() {
   str := strings.Split("HELLO","")
    fmt.Print(str[1])
}

0

文字列文字はルーン文字であるため、それらを印刷するには、文字列に戻す必要があります。

fmt.Print(string("HELLO"[1]))


-3

文字列内の文字を分離する別のソリューション

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
       }

}

文字列配列の場合も:

fmt.Println(string([]rune(sArray[0])[0]))

// =コメント行


11
本当に、 Unicode入力でパニックになる本当に悪いコード(len("cafés")>len([]rune("cafés"))そして、O(n²)の反復ごとに文字列を再変換する可能性があります。ただ実行してくださいfor _, r := range word { fmt.Printf("%c", r) }。本当にインデックスでループしたい場合for x := 0; x < limit; x++。答える前に言語の基本を学んでください。質問
Dave C
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.