问题内容
我正在编写一个程序,在 .txt 文件中逐行获取用户名,并验证用户名是否在其中。然后,我创建了一个切片并将文件转换为字符串并将其附加到字符串切片中。我现在尝试使用 for 循环遍历切片,以查找文件中的用户名,并将其与包含该用户名的另一个字符串变量进行比较。我想检查一下它是否在切片中。做这个的最好方式是什么?我尝试使用切片的 for 循环将范围内的元素与我想要检查的用户名的变量进行比较,但它不起作用。因此,换句话说,我想找出获取一个 txt 文件的最佳方法,该文件包含从上到下添加的用户名列表,让我的程序从该文本文件中读取(循环),并将其与将字符串变量中的预定项(用户名)与文本文件中的内容进行比较,并确定其是否匹配。
用户名(字符串变量)==用户名(文本文件中)
*用户名变量也将基于程序用户输入的内容。因此,我试图最终检查当用户输入用户名时程序是否会验证它是否在文件中。谢谢。
我尝试过的代码示例:
var readSystemCtl []string readSystemCtl = append(readSystemCtl, string(file)) for _, username := range of readSystemCtl { if username == input { //Continue program if true break }else { //Do something else } }
注意: string(file) 是我要读取的文本文件; input 是用户为其用户名输入的字符串变量,该用户名是在程序中预先确定的。
正确答案
作为一名 go 程序员,我很快将您的整体应用需求翻译成了 go 程序。然后我将其与您的代码进行了比较。我不明白为什么你使用 go 切片的线性搜索。为什么不使用随机访问 go 地图?
在比较用户名是否相等之前,请修剪空格 (strings.trimspace
),并且为了不区分大小写,将其转换为小写 (strings.tolower
)。
users.go
package main import ( "bufio" "fmt" "io" "os" "strings" ) func loadusers(r io.reader) (map[string]bool, error) { users := make(map[string]bool) scnr := bufio.newscanner(r) for scnr.scan() { user := strings.trimspace(scnr.text()) if len(user) > 0 { user = strings.tolower(user) users[user] = true } } if err := scnr.err(); err != nil { return nil, err } return users, nil } func loadusersfile(name string) (map[string]bool, error) { f, err := os.open(name) if err != nil { return nil, err } defer f.close() users, err := loadusers(f) if err != nil { return nil, err } return users, nil } func isuser(users map[string]bool, user string) bool { user = strings.trimspace(user) user = strings.tolower(user) return users[user] } func main() { users, err := loadusersfile("users.txt") if err != nil { fmt.fprintln(os.stderr, err) os.exit(1) } scnr := bufio.newscanner(os.stdin) for scnr.scan() { user := scnr.text() fmt.print("user: ", user) if isuser(users, user) { fmt.println(" found") } else { fmt.println(" not found") } } if err := scnr.err(); err != nil { fmt.fprintln(os.stderr, err) os.exit(1) } }
$ cat users.txt username1 Username2 UserName3 $ go build users.go $ ./users User Name X User: User Name X not found username3 User: username3 found $
想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » 将文本文件放入切片然后比较
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » 将文本文件放入切片然后比较