我正在寻找目录列表中的特定文件类型,并使用HasSuffix进行比较,寻找一些特定的文件类型。我想让这个比较案例不敏感。
有没有办法在HasSuffix函数中添加EqualFold或其他不区分大小写的比较?
答案 0 :(得分:7)
你可以使用
if strings.HasSuffix(strings.ToLower(s), "suffix") {
// do something
}
您也可以编写自己的包装函数:
func hasSuffix(s, suffix string, caseSensitive bool) bool {
if caseSensitive {
return strings.HasSuffix(s, suffix)
}
return strings.HasSuffix(strings.ToLower(s), suffix)
}
对于您可以使用的文件名或路径(请参阅PeterSO的回答):
if strings.ToLower(filepath.Ext(s)) == ".fileending" {
// do something
}
答案 1 :(得分:2)
“我正在寻找目录列表中的特定文件类型。我想使这个比较不区分大小写。”
例如,
package main
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
func hasExts(path string, exts []string) bool {
pathExt := strings.ToLower(filepath.Ext(path))
for _, ext := range exts {
if pathExt == strings.ToLower(ext) {
return true
}
}
return false
}
func main() {
dir := `./`
files, err := ioutil.ReadDir(dir)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return
}
sourceExts := []string{".go", ".Py", ".c", ".cpp"}
for _, fi := range files {
if hasExts(fi.Name(), sourceExts) {
fmt.Println(fi.Name())
}
}
}
输出:
t.c
t.go
t.py
t1.go
t1.py
t2.go
对于特殊形式的strings.HasSuffix
,首先要复制strings
package中的代码。
func HasSuffix(s, suffix string) bool {
return len(s) >= len(suffix) && s[len(s)-len(suffix):] == suffix
}
然后根据您的目的修改它。例如,
func hasSuffix(s, suffix string) bool {
return len(s) >= len(suffix) &&
strings.ToLower(s[len(s)-len(suffix):]) == strings.ToLower(suffix)
}