如何索引Golang字符串中的字符?

时间:2013-02-22 06:56:05

标签: string go character

如何获得“E”输出而不是69?

package main

import "fmt"

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

Golang是否具有将char转换为byte的功能,反之亦然?

10 个答案:

答案 0 :(得分:106)

解释的字符串文字是使用单个字符的(可能是多字节)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 Programming Language Specification

Conversions部分。

The Go Blog: Strings, bytes, runes and characters in Go

答案 1 :(得分:14)

this怎么样?

fmt.Printf("%c","HELLO"[1])

正如彼得所指出的那样,只允许使用ASCII:

fmt.Printf("%c", []rune("HELLO")[1])

答案 2 :(得分:6)

Go并没有这样的字符类型。 byte通常用于ASCII字符,rune用于Unicode字符,但它们都只是整数类型的别名(uint8和int32)。因此,如果您想强制将它们打印为字符而不是数字,则需要使用Printf("%c", x)%c格式规范适用于任何整数类型。

答案 3 :(得分:4)

将字符串解释为字符串的一般解决方案是string("HELLO"[1])

Rich的解决方案当然也有效。

答案 4 :(得分:4)

也可以通过切片来完成

package main

import "fmt"

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

答案 5 :(得分:1)

您也可以尝试使用字符串进行类型转换。

package main

import "fmt"

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

答案 6 :(得分:1)

字符串字符是符文,因此要打印它们,必须将它们变回字符串。

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

答案 7 :(得分:0)

解决方案是:

 package main

 import "fmt"

func main() {
  str := "HELLO"
  string(str[0])//H
  string(str[1])//E
  string(str[2])//L
  string(str[3])//L
  string(str[4])//O
}

答案 8 :(得分:-1)

尝试按字符索引获取字符

function getData(var1, callback){

  url= "http://test.server/bla?param="+var1;

  request.get(url, function (error, response, body){
    var results = [];
    var items = JSON.parse(body).entity.resultArray;
    var done = 0, max = items.length;
    for(var item of items) {  
       var o = {};
       o['data1'] = item.data1;
       o['data2'] = item.data2;
       o['data3'] = item.data3;

       getSecondStep(o, function(secondStepData){
         //console.log("Callback object");
         //console.log(o);
         o['secondStepData'] = secondStepData;
         results.push(o);
         done += 1;
         if(done === max) callback(results);
       });
    }
});
}

答案 9 :(得分:-2)

隔离字符串中字符的另一种解决方法

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]))

// =注释行