Golang中如何用"x"作为分隔符分割字符串

Golang中如何用"x"作为分隔符分割字符串 你好 - 我无法使用“x”作为分隔符来分割字符串。代码如下。有人能解释为什么分割操作在变量“resol”上不起作用吗?

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

package main
import (
"fmt"
"path/filepath"
"strings"
)
func main() {
var filename, base, resol, reso string
filename = "SN_FEDERAL_CUP_FTR_1000×560.jpg"
base = strings.TrimSuffix(filename, filepath.Ext(filename))
resol = strings.Split(base, "_")[len(strings.Split(base, "_"))-1]
reso = "1000x560"
fmt.Println(resol, strings.Split(resol, "x"))
fmt.Println(reso, strings.Split(reso, "x"))
}

更多关于Golang中如何用"x"作为分隔符分割字符串的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

谢谢你,肖恩。代码现在可以运行了。

更多关于Golang中如何用"x"作为分隔符分割字符串的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


"1000×560" != "1000x560"。第一个字符串包含一个Unicode乘法符号(U+00D7)。

在您的代码中,问题在于字符串中实际使用的是乘号字符“×”(Unicode U+00D7),而不是字母“x”。您可以通过以下两种方式解决:

解决方案1:使用正确的分隔符

package main

import (
    "fmt"
    "strings"
)

func main() {
    filename := "SN_FEDERAL_CUP_FTR_1000×560.jpg"
    
    // 获取分辨率部分
    parts := strings.Split(filename, "_")
    resol := parts[len(parts)-1]  // "1000×560.jpg"
    resol = strings.TrimSuffix(resol, ".jpg")  // "1000×560"
    
    // 使用正确的乘号字符进行分割
    resolutionParts := strings.Split(resol, "×")
    fmt.Println("分辨率分割结果:", resolutionParts)  // [1000 560]
    
    // 如果需要使用字母"x"作为分隔符,可以替换
    resolWithX := strings.Replace(resol, "×", "x", -1)
    fmt.Println("替换后的字符串:", resolWithX)  // 1000x560
    fmt.Println("使用x分割:", strings.Split(resolWithX, "x"))  // [1000 560]
}

解决方案2:处理两种可能的分隔符

package main

import (
    "fmt"
    "strings"
)

func main() {
    filename := "SN_FEDERAL_CUP_FTR_1000×560.jpg"
    
    // 提取分辨率部分
    base := strings.TrimSuffix(filename, ".jpg")
    parts := strings.Split(base, "_")
    resol := parts[len(parts)-1]
    
    // 尝试用两种分隔符分割
    var width, height string
    
    if strings.Contains(resol, "×") {
        resolutionParts := strings.Split(resol, "×")
        width, height = resolutionParts[0], resolutionParts[1]
    } else if strings.Contains(resol, "x") {
        resolutionParts := strings.Split(resol, "x")
        width, height = resolutionParts[0], resolutionParts[1]
    }
    
    fmt.Printf("宽度: %s, 高度: %s\n", width, height)  // 宽度: 1000, 高度: 560
}

解决方案3:使用正则表达式处理多种分隔符

package main

import (
    "fmt"
    "regexp"
)

func main() {
    filename := "SN_FEDERAL_CUP_FTR_1000×560.jpg"
    
    // 匹配分辨率模式:数字 + 分隔符(x或×) + 数字
    re := regexp.MustCompile(`(\d+)[x×](\d+)`)
    matches := re.FindStringSubmatch(filename)
    
    if matches != nil {
        fmt.Printf("宽度: %s, 高度: %s\n", matches[1], matches[2])  // 宽度: 1000, 高度: 560
    }
}

关键区别:

  • 您的字符串中使用的是乘号“×”(Unicode U+00D7)
  • 您尝试分割时使用的是字母“x”(ASCII 120)
  • 这两个是不同的字符,因此strings.Split()无法正确分割

您可以通过打印字符的Unicode值来验证:

fmt.Printf("%U\n", '×')  // U+00D7
fmt.Printf("%U\n", 'x')  // U+0078
回到顶部