Go中的文本处理-如何将字符串转换为字节?

Go中的文本处理-如何将字符串转换为字节?,go,Go,我正在写一个小的pragram来给段落编号: 将段落编号以[1]…,[2]….的形式放在每段前面。。。。 应排除文章标题。 这是我的节目: package main import ( "fmt" "io/ioutil" ) var s_end = [3]string{".", "!", "?"} func main() { b, err := ioutil.ReadFile("i_have_a_dream.txt") if err != nil {

我正在写一个小的pragram来给段落编号:

将段落编号以[1]…,[2]….的形式放在每段前面。。。。 应排除文章标题。 这是我的节目:

package main

import (
    "fmt"
    "io/ioutil"
)

var s_end = [3]string{".", "!", "?"}

func main() {
    b, err := ioutil.ReadFile("i_have_a_dream.txt")
    if err != nil {
        panic(err)
    }

    p_num, s_num := 1, 1

    for _, char := range b {
        fmt.Printf("[%s]", p_num)
        p_num += 1
        if char == byte("\n") {
            fmt.Printf("\n[%s]", p_num)
            p_num += 1
        } else {
            fmt.Printf(char)
        }
    }
}
我得到了这个错误:

prog.go:21: cannot convert "\n" to type byte
prog.go:21: cannot convert "\n" (type string) to type byte
prog.go:21: invalid operation: char == "\n" (mismatched types byte and string)
prog.go:25: cannot use char (type byte) as type string in argument to fmt.Printf
[process exited with non-zero status]
如何将字符串转换为字节

处理文本的一般做法是什么?读入、按字节解析还是按行解析

更新

通过将缓冲区字节转换为字符串,用正则表达式替换字符串,我解决了这个问题。感谢@Tomasz Kłak对regexp的帮助

我把代码放在这里作为参考

package main

import (
    "fmt"
    "io/ioutil"
    "regexp"
)


func main() {
    b, err := ioutil.ReadFile("i_have_a_dream.txt")
    if err != nil {
        panic(err)
    }

    s := string(b)
    r := regexp.MustCompile("(\r\n)+")
    counter := 1

    repl := func(match string) string {
        p_num := counter
        counter++
        return fmt.Sprintf("%s [%d] ", match, p_num)
    }

    fmt.Println(r.ReplaceAllStringFunc(s, repl))
}
使用\n将其视为数组,使用“\n”将其视为单个字符。

字符串不能以有意义的方式转换为字节。使用以下方法之一:

如果你有一个字符串文字,比如A,考虑使用一个类似的“A”,它可以被转换成字节。 如果要从字符串中提取一个字节,请使用类似myString[42]的字符串。 如果要将字符串的内容解释为十进制数,请使用或。
请注意,在编写能够处理Unicode字符的程序时,这是一种习惯。解释如何这样做对于这个答案来说太多了,但是有一些教程解释了需要注意的事项。

使用单引号“\n”而不是双引号\n来表示字节。您的Printf也应该有一个格式化字符串。见`谢谢你的解释和对我们考虑的评论。我使用s:=stringb将字节转换为字符串,并使用正则表达式替换解决了这个问题。@Nick您不需要转换为字符串;只需使用regexp.*regexp.ReplaceAllFunc而不是regexp.*regexp.ReplaceAllStringFunc。