猿问

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

我有一个这样的文件:

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^M

www.apple.com^M

www.facebook.com^M


有只小跳蛙
浏览 352回答 2
2回答

精慕HU

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)}

呼唤远方

不太优雅,但...您可以使用以下命令\r从字符串的末尾剥离:        line, err := buf.ReadString('\n')        line = strings.TrimRight(line, "\r")它将删除多个\r(^M),如果没有,则为空操作。
随时随地看视频慕课网APP

相关分类

Go
我要回答