golang go中字串操作和轉換簡介

2021-10-17 09:07:13 字數 4567 閱讀 9038

strings包

strconv包

golang中字串是一種基本型別(string),是乙個不可改變的utf-8字串行:

字串建立後,就不可改變;即不允許修改。

golang支援兩種型別的字串字面量:

字串宣告與初始化非常容易:

var s1 string

s2 :=

"hello"

多行字串使用反引號:

s :=

`hello

world!

line2`

fmt.

println

(s)

len()返回字串中的位元組數(非字元數目),索引操作s[i]返回字串s中第i個位元組的值(非ascii碼返回對應位元組的數值)。要獲取對應字元數(包含非ascii字元時)需要使用utf8.runecountinstring

s1 :=

"w字元"

fmt.

println

(len

(s1)

)// 7 (乙個漢字3個位元組)

fmt.

println

(utf8.

runecountinstring

(s1)

)// 3

golang中有多種字串拼接方法:

一般簡單拼接直接使用+,字串陣列/切片拼接為字串時用join,多條不相關字串拼接時用builder。

var buff bytes.buffer

buff.

writestring

("hello"

)buff.

writerune

('字'

)buff.

writestring

("符"

)fmt.

println

(buff.

string()

)// hello字元

var build strings.builder

build.

writestring

("hello"

)build.

writerune

('字'

)build.

writestring

("符"

)fmt.

println

(build.

string()

)// hello字元

go中可通過切片方式快速獲取子串s=src[low:high](指定索引範圍,『左含右不含』)。索引不能越界,否則會導致panic異常。

s1 :=

"abcdef"

fmt.

println

(s1[1:

4],s1[1:

],s1[:1

])// bcd bcdef a

有兩種遍歷方式:下標與range。下標方式遍歷時,輸出的是每個位元組;要輸出對應的unicode字元,需要通過range方式。

s1 :=

"w字元"

// 輸出7個數值(每個位元組對應數值)

for i:=

0; i<

len(s1)

; i++

// 輸出三個字元(分別:w 字 符)

for i, v:=

range s1

golang中字串內容預設不能修改,若要修改需要轉換為byte或rune型別修改後再轉回:

s1 :=

"w字元"

b1 :=

byte

(s1)

fmt.

println

(len

(b1)

)// 7

b1[0]=

'm'fmt.

println

(string

(b1)

)// m字元

r1 :=

rune

(s1)

fmt.

println

(len

(r1)

)// 3

r1[1]=

'世'fmt.

println

(string

(r1)

)//w世符

strings中包含了一些常用的字串操作函式,在涉及到字串修改時,返回新的串。

rot13 :=

func

(r rune

)rune

return r

}fmt.

println

(strings.

map(rot13,

"twas brillig and the slithy gopher..."

))

用於讀取字串,實現了io.reader、io.readerat、io.seeker、io.writerto、io.bytescanner、io.runescanner。

r := strings.

newreader

("abcdefghijklmn"

)fmt.

println

("total len:"

, r.

len())

// 14

var buf [

]byte

buf =

make([

]byte,5

)readlen, err := r.

read

(buf)

fmt.

println

("read len:"

, readlen)

// 5

if err !=

nilfmt.

println

(string

(buf)

)// abcde

fmt.

println

("remain len:"

, r.

len())

// 9 讀取到了5個 剩餘未讀是14-5

fmt.

println

("size:"

, r.

size()

)// 14 字串的長度

用於字串替換;placer中包含要替換字串的列表,且是執行緒安全的:

r := strings.

newreplacer

("<"

,"<"

,">"

,">"

)fmt.

println

(r.replace

("this ishtml!"))

// this ishtml!

strconv包用於字串與其它型別間的轉換:

在轉換時,會出現兩種型別的錯誤:

func parseint(s string, base int, bitsize int)(i int64, err error)

常用的atoi,是乙個簡易版,相當於parseint(s, 10, 0)

func formatfloat(f float64, fmt byte, prec, bitsize int) string

格式標記:

f :=

100.123456789

fmt.

println

(strconv.

formatfloat

(f,'b',5

,32))

// 13123382p-17

fmt.

println

(strconv.

formatfloat

(f,'e',5

,32))

// 1.00123e+02

fmt.

println

(strconv.

formatfloat

(f,'e',5

,32))

// 1.00123e+02

fmt.

println

(strconv.

formatfloat

(f,'f',5

,32))

// 100.12346

fmt.

println

(strconv.

formatfloat

(f,'g',5

,32))

// 100.12

fmt.

println

(strconv.

formatfloat

(f,'g',5

,32))

// 100.12

Python中字串常用操作和字串的切片

a abcdefg print a 1 3 切片冒號表示,冒號前面表示從第幾個座標開始,包含開始那個,後面表示從哪個座標結束 不包含結束座標 print a 1 後坐標不寫表示取到所有 print a 1 1 負數表示從後面第乙個座標開始字串在python中記憶體儲存乙個字母就代表乙個位元組 數字2...

字串的基本操作和模式匹配

include include define max size 100 define ok 1 define error 1 typedef int status 字串的結構體 typedef struct string 字串長度初始化為0 status strinit string s 生成乙個值...

對於js中的字串操作和陣列的操作

陣列的操作 var myarry 1 34 56 23 1.length myarray.length 2.prototype 原型 這個函式是獲取最大值的函式 function getmax array.prototype.max getmax myarray.max 就可以呼叫getmax這個方...