将文本文件放入切片然后比较

将文本文件放入切片然后比较

问题内容

我正在编写一个程序,在 .txt 文件中逐行获取用户名,并验证用户名是否在其中。然后,我创建了一个切片并将文件转换为字符串并将其附加到字符串切片中。我现在尝试使用 for 循环遍历切片,以查找文件中的用户名,并将其与包含该用户名的另一个字符串变量进行比较。我想检查一下它是否在切片中。做这个的最好方式是什么?我尝试使用切片的 for 循环将范围内的元素与我想要检查的用户名的变量进行比较,但它不起作用。因此,换句话说,我想找出获取一个 txt 文件的最佳方法,该文件包含从上到下添加的用户名列表,让我的程序从该文本文件中读取(循环),并将其与将字符串变量中的预定项(用户名)与文本文件中的内容进行比较,并确定其是否匹配。

用户名(字符串变量)==用户名(文本文件中)

*用户名变量也将基于程序用户输入的内容。因此,我试图最终检查当用户输入用户名时程序是否会验证它是否在文件中。谢谢。

我尝试过的代码示例:

var readSystemCtl []stringreadSystemCtl = 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 mainimport (    "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.txtusername1Username2UserName3$ go build users.go$ ./usersUser Name XUser: User Name X not foundusername3User: username3 found$

登录后复制

以上就是将文本文件放入切片然后比较的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2485348.html

(0)
上一篇 2025年3月4日 21:44:42
下一篇 2025年2月27日 22:57:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论