07/09/2018, 11:13

Thủ Thuật Làm Việc Với String trong Golang

String (hay chuỗi) là kiểu dữ liệu được sử dụng phổ biến trong các ngôn ngữ lập trình khác nhau. Trong bài viết này chúng ta sẽ tìm hiểu về các thủ thuật hữu ích khi làm việc với kiểu dữ liệu String trong Golang. Đến Số Lượng Ký Tự Của Chuỗi Để xác định số lượng ký tự của một chuỗi hay độ ...

String (hay chuỗi) là kiểu dữ liệu được sử dụng phổ biến trong các ngôn ngữ lập trình khác nhau. Trong bài viết này chúng ta sẽ tìm hiểu về các thủ thuật hữu ích khi làm việc với kiểu dữ liệu String trong Golang.

Golang String

Đến Số Lượng Ký Tự Của Chuỗi

Để xác định số lượng ký tự của một chuỗi hay độ dài chuỗi trong Golang chúng ta sử dụng hàmlens():

package main

import "fmt"

func main() {
    myString := "Hello Golang"
    fmt.Println("Chuỗi có độ dài: ", len(myString))
}

Kết quả hiển thị khi chạy đoạn code trên sẽ như sau:

Chuỗi có độ dài: 12

Ký Tự Trong Chuỗi

Mỗi ký tự trong chuỗi được đánh số thứ tự index tương tự như trong mảng:

package main

import "fmt"

func main() {
    myString := "Hello Golang"
    fmt.Printf("Chuỗi đầu tiên: %c", myString[0])
    fmt.Printf("Chuỗi thứ 2: %c", myString[1])
    fmt.Printf("Chuỗi thứ 3: %c", myString[2])
}

Kết quả hiển thị của đoạn code trên:

Chuỗi đầu tiên: H
Chuỗi thứ 2: e
Chuỗi thứ 3: l

Lưu ý: Ký tự đầu tiên trong chuỗi được đánh index là 0.

Ngoài ra ở trong đoạn code trên nếu trong fmt.Printf() chúng ta sử dụng %c thay vì %d hoặc %v như sau:

fmt.Printf("Chuỗi thứ 3: %d
", myString[0])
// Hoặc
fmt.Printf("Chuỗi thứ 3: %v
", myString[0])

Thì lúc này Golang sẽ hiển thị con số tương ứng với chuỗi ký tự trong bảng ký tự (hay character set) ASCII:

72
101
108
108
111

Trong đó H được biểu diễn bởi số 72, e biểu diễn bởi 101, l biểu diễn bởi 108...

Giá Trị Của Chuỗi Là Không Đổi (Immutable)

Giá trị của chuỗi là không đổi (Immutable). Nói cách khác chúng ta không thể thay đổi giá trị của bất cứ ký tự nào trong một chuỗi. Đoạn code phía dưới đây thay đổi giá trị của ký tự đầu tiên trong chuỗi myString:

package main

import "fmt"

func main() {
    myString := "Hello Golang"
    myString[0] = "h"
    fmt.Printf("Không hiển thị do lỗi gây ra ở dòng trên")
}

Và khi chạy sẽ báo lỗi như sau:

prog.go:7:14: cannot assign to myString[0]

Lặp Qua Các Ký Tự Trong Chuỗi

Để lặp qua từng ký tự trong một chuỗi chúng ta có thể sử dụng vòng lặp for loop trong Golang:

package main
import "fmt"

func main() {
    myString := "Hello Golang"
    for i := 0; i < len(myString); i++ {
        fmt.Printf("%c ", myString[i])
    }
}

Câu lệnh trên sẽ hiển thị kết quả như sau:

Hello Golang

Ngoài ra, còn có một cách khác để lặp qua chuỗi như sau:

package main

import "fmt"

func main() {
    myString := "Hello Golang"
    for index, char := range myString {
        fmt.Printf("Chuỗi ở vị trí %d là %c
", index, char)
    }
}

Kết quả hiển thị khi chạy đoạn code trên sẽ như sau:

Chuỗi ở vị trí 0 là H
Chuỗi ở vị trí 1 là e
Chuỗi ở vị trí 2 là l
Chuỗi ở vị trí 3 là l
Chuỗi ở vị trí 4 là o
Chuỗi ở vị trí 5 là  
Chuỗi ở vị trí 6 là G
Chuỗi ở vị trí 7 là o
Chuỗi ở vị trí 8 là l
Chuỗi ở vị trí 9 là a
Chuỗi ở vị trí 10 là n
Chuỗi ở vị trí 11 là g

String Literal

String literal là cú pháp hữu ích cho phép chúng ta có thể dễ dàng biểu diễn một chuỗi bao gồm các ký tự đặc biệt như ", ... hoặc dài nhiều dòng.

Để biểu diễn chuỗi sử dụng cú pháp string literal thì chúng ta đặt chuỗi bên trong cặp dấu backstick thay vì đặt bên trong cặp dầu nháy " ". Ví dụ:

package main
import "fmt"
func main() {
    s := `Hello,
    "Golang"!`
fmt.Println(s)
}

Nếu như không sử dụng string literal thì bạn sẽ cần thoát (escape) ký tự đặc biệt là dấu xuống dòng và ký tự " bên trong chuỗi như sau:

 s := "Hello,
 "Golang"!"

Việc thoát chuỗii được thực hiện nhờ sử dụng ký tự . Tuy nhiên nếu như chuỗi có quá nhiều ký tự đặc biệt cần thoát hoặc tách thành nhiều dòng khác nhau thì việc sử dụng cú pháp string literal sẽ trở nên thuận tiện hơn.

0