Go中的文本处理-如何将字符串转换为字节?
我正在写一个小的pragram来给段落编号: 将段落编号以[1]…,[2]….的形式放在每段前面。。。。 应排除文章标题。 这是我的节目: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 {
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。