Go去除空字符| 青训营

264 阅读1分钟

在 Go 语言中,strings.TrimSuffix() 函数用于去除字符串结尾指定的后缀。然而,它并不适用于去除 \0,因为 \0 并不是一个普通的可见字符,而是表示空字符(null character)的特殊字符。

由于 \0 不是一个可见字符,普通的字符串处理函数如 TrimSuffixTrimSpace 并不能正确地处理它。要去除 \0,我们需要使用其他方法。

一种方法是使用 strings.Replace() 函数,如我在之前的回答中所示。另一种方法是通过遍历字符串来手动去除 \0。下面是使用遍历的方法去除 \0 的示例代码: package main

import ( "bufio" "fmt" "math/rand" "os" "strconv" "strings" "time" )

func main() { maxNum := 100 rand.Seed(time.Now().UnixNano()) secretNumber := rand.Intn(maxNum) fmt.Println("The secret number is ", secretNumber)

fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
	fmt.Println("An error occured while reading input. Please try again", err)
	return
}

// Remove null characters (\0) from input
var sanitizedInput strings.Builder
for _, char := range input {
	if char != '\x00' {
		sanitizedInput.WriteRune(char)
	}
}
input = sanitizedInput.String()

fmt.Println(input)
guess, err := strconv.Atoi(input)
if err != nil {
	fmt.Println("Invalid input. Please enter an integer value")
	return
}
fmt.Println("Your guess is ", guess)

} 在上面的代码中,我使用了 strings.Builder 类型来构建去除 \0 后的新字符串 sanitizedInput,然后将其转换为普通的字符串。这样,输入中的 \0 就会被成功去除。

请注意,在大多数情况下,我们不需要手动处理 \0,因为通常情况下它们不会出现在用户输入的文本中。只有在特定场景下,才需要处理 \0 或其他特殊字符。