Golang中strings.Trim为什么无法显示最后一个字符

Golang中strings.Trim为什么无法显示最后一个字符 你好,

我正在使用 strings.Trim 来只显示相关信息,但它没有显示最后一个字符。

FilePath := strings.Trim(filepath, "C:://users//123//")
输出将是:File_123.tx(它缺少最后一个 "t")

那么有什么方法可以获取完整的名称吗?

2 回复

你是想要 filepath.Base 吗?https://golang.org/pkg/path/filepath/#Base

更多关于Golang中strings.Trim为什么无法显示最后一个字符的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


strings.Trim 的行为是删除字符串首尾连续出现在第二个参数字符集合中的字符,而不是删除指定的子字符串。在你的例子中,"C:://users//123//" 被视为一个字符集合,包含字符 'C'':''/''u''s''e''r''1''2''3'。当字符串末尾的字符 't' 不在这个集合中时,删除就会停止。

你的实际需求可能是删除指定的前缀后缀,而不是删除字符集合。以下是几种正确的做法:

1. 使用 strings.TrimPrefixstrings.TrimSuffix(如果前缀/后缀固定)

package main

import (
    "fmt"
    "strings"
)

func main() {
    filepath := "C:://users//123//File_123.txt"
    // 删除固定前缀
    trimmed := strings.TrimPrefix(filepath, "C:://users//123//")
    fmt.Println(trimmed) // 输出: File_123.txt
}

2. 使用 strings.TrimLeft(仅删除左侧字符集合)

package main

import (
    "fmt"
    "strings"
)

func main() {
    filepath := "C:://users//123//File_123.txt"
    // 仅删除左侧出现在字符集合中的字符
    trimmed := strings.TrimLeft(filepath, "C:://users//123//")
    fmt.Println(trimmed) // 输出: File_123.txt
}

3. 使用路径处理函数(如果处理文件路径)

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    filepath := "C:://users//123//File_123.txt"
    // 获取文件名(去除目录部分)
    filename := filepath.Base(filepath)
    fmt.Println(filename) // 输出: File_123.txt
}

错误示例分析

package main

import (
    "fmt"
    "strings"
)

func main() {
    filepath := "C:://users//123//File_123.txt"
    // 错误用法:会删除首尾所有出现在集合中的字符
    wrong := strings.Trim(filepath, "C:://users//123//")
    fmt.Println(wrong) // 输出: ile_123.tx
    // 因为首尾的'F'和't'不在集合中,但中间的'F'和't'不受影响
}

选择哪种方法取决于你的具体需求:

  • 如果前缀固定不变,用 strings.TrimPrefix
  • 如果只是清理路径字符,用 strings.TrimLeft
  • 如果是标准文件路径,用 filepath.Base
回到顶部