我正在從目錄列表中查找特定文件類型,並使用HasSuffix進行比較以查找幾個特定的文件類型。我想讓這個比較大小寫不敏感。不區分大小寫HasSuffix in Go
有沒有辦法將EqualFold或其他不區分大小寫的比較添加到HasSuffix函數中?
我正在從目錄列表中查找特定文件類型,並使用HasSuffix進行比較以查找幾個特定的文件類型。我想讓這個比較大小寫不敏感。不區分大小寫HasSuffix in Go
有沒有辦法將EqualFold或其他不區分大小寫的比較添加到HasSuffix函數中?
你可以只使用
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
}
「我正在從直接找尋特定文件類型ry上市。我想作這種比較不區分大小寫「
例如,
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)
}
我不能確定「後綴」的情況下,所以我也將ToLower,以及似乎是最有意義的。 if strings.HasSuffix(strings.ToLower(s),strings.ToLower(extension)){ //做某事 } –