[2019-06-27 20:35:27 最后更新]
golang 中的字符串与 rune 与 byte 的转换
golang 的字符串默认是 utf8 的序列。但按平常的 for 循环的话得到的其实是 byte 的遍历. 要遍历各个字符串的话实际要转换成 rune 数组.
rune('c') 这样就是得到一个 rune 可以用来比较。
'c' 这样其实是得到一个 byte 可以用来和 byte 比较.
--------------------------------------------------
Go 将 rune 转换为 string
2018-11-07
在 Go 中有几种方式将 rune 类型转换为 string
1
2
string('c')
// string(rune('c'))
1
c
或者借助 strconv 包
1
strconv.QuoteRune('c')
1
'c'
这种方式会将单引号也打印出来
--------------------------------------------------
循环的方法可以看以下的函数实例
//ExtractFileName:返回完整文件名中的文件名称 (带扩展名),如"mytest.doc"
//ExtractFileExt 返回完整文件名中的文件扩展名(带.),如".doc"
func ExtractFileExt(s string) (string) {
r := "";
//for i:=0; i < len(s); i++{
// for i:=len(s)-1; i >=0; i--{
// c := s[i]; //这样得到的是 byte
// //fmt.Printf("%c", s[i])
//// if (c == ' ') { return false; }
// if (c == '/') { return r; }
// if (c == '\\') { return r; }
// if (c == '.') { r = c + r; return r; }
// r = c + r;
// }
//-----------------
//str := "烫烫烫烫";
//array := []rune(str);
// str := "./\\";
// array := []rune(str);
// ch1 := array[0];
// ch2 := array[1];
// ch3 := array[2];
//这样遍历不能从后向前
//for i, ch := range s {
// fmt.Println(i, ch) //ch的类型为rune 默认utf-8编码,一个汉字三个字节
array := []rune(s);
for i:=len(array)-1; i >=0; i--{
ch := array[i];
fmt.Println(i, ch) //ch的类型为rune 默认utf-8编码,一个汉字三个字节
//if (ch == (string(".")[0])) { return r; }
//if (ch == ch1) { return r; }
if (ch == rune('/')) { return r; }
if (ch == rune('\\')) { return r; }
if (ch == rune('.')) { r = string(ch) + r; return r; }
r = string(ch) + r;
}
return r;
}//