为了账号安全,请及时绑定邮箱和手机立即绑定

读取文件时如何删除golang中的特殊字符?

读取文件时如何删除golang中的特殊字符?

Go
有只小跳蛙 2021-12-07 17:08:52
我有一个这样的文件:1 www.google.com$2 www.apple.com$3 www.facebook.com$我在 golang 中是这样读的:type ListConf struct {    File  string    Datas map[string]struct{}}func loadListConf(conf *ListConf, path string) {    file, err := os.Open(path + "/" + conf.File)    if err != nil {        fmt.Println("Load conf " + conf.File + " error: " + err.Error())        return    }    defer file.Close()    conf.Datas = make(map[string]struct{})    buf := bufio.NewReader(file)    end := false    for !end {        line, err := buf.ReadString('\n')        if err != nil {            if err != io.EOF {                fmt.Println("Load conf " + conf.File + " error: " + err.Error())                return            } else {                end = true            }        }        item := strings.Trim(line, "\n")        if item == "" {            continue        }        conf.Datas[item] = struct{}{}    }}但是当我在地图中搜索诸如“www.google.com”之类的关键字时,却显示地图中没有“www.google.com”。website := "www.google.com"if _, ok := conf.Datas[website]; ok {    fmt.Printf("%s is in the map.", website)} else {    fmt.Printf("%s is not in the map.", website)}它打印“www.google.com 不在地图中”。我发现地图中每个键的末尾都有一个 ^M,我的问题是如何删除 ^M 字符?www.google.com^Mwww.apple.com^Mwww.facebook.com^M
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

Windows 上文本文件中的默认行分隔符是两个字符的序列:\r\n. ^M您在字符串中看到的字符是\r.


bufio.Scanner可以以独立于平台的方式将输入分成几行:


scanner := bufio.NewScanner(file)

for scanner.Scan() {

    fmt.Println(scanner.Text())

}

if err := scanner.Err(); err != nil {

    fmt.Fprintln(os.Stderr, "error reading from the file:", err)

}


查看完整回答
反对 回复 2021-12-07
?
呼唤远方

TA贡献1856条经验 获得超11个赞

不太优雅,但...

您可以使用以下命令\r从字符串的末尾剥离:

       line, err := buf.ReadString('\n')

        line = strings.TrimRight(line, "\r")

它将删除多个\r(^M),如果没有,则为空操作。


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 351 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信