Golang中字符串终止是否有特殊字符

Golang中字符串终止是否有特殊字符 我正在编写一个函数来移除字符串开头和结尾的空白字符

https://play.golang.org/p/n6lIkLHlZl6

package Madhur

// 该包将在字符串名称存在空白字符时修改用户名

// 这将移除字符串中的空白字符(如果存在)

func Remove_Whitespc(word string) string {

	// 将字符串转换为字节数组,因为字符串是不可变的
	str := []byte(word)
	if str[0] == ' '{
		for i := 0; i < len(str) - 1; i++ {
			str[i] = str[i+1]
		}
	}

	return string(str)
}

更多关于Golang中字符串终止是否有特殊字符的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

为什么不使用标准库中"strings"包提供的Trim函数

在你的情况下可以这样做:

strings.Trim(word, " ")

文档中的示例:

package main

import (
	"fmt"
	"strings"
)

func main() {
	fmt.Print(strings.Trim("¡¡¡Hello, Gophers!!!", "!¡"))
}

更多关于Golang中字符串终止是否有特殊字符的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,字符串没有特殊的终止字符,而是使用UTF-8编码的字节序列,其长度由内置的len()函数确定。你的代码存在几个问题:

  1. 只处理开头的空格,没有处理结尾的空格
  2. 当移除开头空格时,数组移位逻辑会丢失最后一个字符
  3. 没有处理多个连续空格的情况
  4. 没有检查空字符串的情况

以下是改进的实现:

package main

import (
	"fmt"
	"unicode"
)

func Remove_Whitespace(word string) string {
	// 处理空字符串
	if len(word) == 0 {
		return word
	}
	
	// 转换为rune数组以正确处理Unicode字符
	runes := []rune(word)
	
	// 找到第一个非空白字符的位置
	start := 0
	for start < len(runes) && unicode.IsSpace(runes[start]) {
		start++
	}
	
	// 找到最后一个非空白字符的位置
	end := len(runes) - 1
	for end >= start && unicode.IsSpace(runes[end]) {
		end--
	}
	
	// 返回去除空白后的子字符串
	return string(runes[start:end+1])
}

func main() {
	testCases := []string{
		"  hello world  ",
		"hello world",
		"   ",
		"",
		"  \t\nhello\t\n  ",
	}
	
	for _, test := range testCases {
		result := Remove_Whitespace(test)
		fmt.Printf("原始: '%s' -> 结果: '%s'\n", test, result)
	}
}

更简单的方法是使用标准库的strings.TrimSpace()函数:

package main

import (
	"fmt"
	"strings"
)

func main() {
	testString := "  hello world  \t\n"
	result := strings.TrimSpace(testString)
	fmt.Printf("原始: '%s'\n", testString)
	fmt.Printf("处理后: '%s'\n", result)
}

输出:

原始: '  hello world  	
'
处理后: 'hello world'

strings.TrimSpace()函数会移除字符串开头和结尾的所有Unicode空白字符,包括空格、制表符、换行符等,这是处理此类需求的标准方法。

回到顶部