Go 中不区分大小写的 HasSuffix
Case insensitive HasSuffix in Go
我正在从目录列表中查找特定文件类型,并使用 HasSuffix 进行比较以查找一些特定文件类型。我想让这个比较不区分大小写。
有没有办法向 HasSuffix 函数添加 EqualFold 或其他不区分大小写的比较?
你可以直接使用
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
}
"I am looking for specific file types from a directory listing. I would like to make this comparison case insensitive."
例如,
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)
}
我正在从目录列表中查找特定文件类型,并使用 HasSuffix 进行比较以查找一些特定文件类型。我想让这个比较不区分大小写。
有没有办法向 HasSuffix 函数添加 EqualFold 或其他不区分大小写的比较?
你可以直接使用
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
}
"I am looking for specific file types from a directory listing. I would like to make this comparison case insensitive."
例如,
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)
}