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

