gpt4 book ai didi

strings.Go 中的拆分

转载 作者:IT老高 更新时间:2023-10-28 13:06:51 26 4
gpt4 key购买 nike

文件名.txt由许多名称组成:

"KELLEE","JOSLYN","JASON","INGER","INDIRA","GLINDA","GLENNIS"

有谁知道如何拆分字符串,使其成为用逗号分隔的各个名称?

KELLEE,JOSLYN,JASON,INGER,INDIRA,GLINDA,GLENNIS

以下代码用逗号分隔并在名称周围留下引号,什么是转义字符以拆分出。可以在一个Split语句中完成,拆分出”, " 并用逗号隔开?

package main

import "fmt"
import "io/ioutil"
import "strings"

func main() {
fData, err := ioutil.ReadFile("names.txt") // read in the external file
if err != nil {
fmt.Println("Err is ", err) // print any error
}
strbuffer := string(fData) // convert read in file to a string

arr := strings.Split(strbuffer, ",")

fmt.Println(arr)

}

顺便说一下,这是 Project Euler 问题 #22 的一部分。http://projecteuler.net/problem=22

最佳答案

Jeremy 的回答基本上是正确的,并且完全符合您的要求。但是您的“names.txt”文件的格式实际上是众所周知的,称为CSV。 (逗号分隔值)。幸运的是,Go 带有 encoding/csv包(它是标准库的一部分),用于轻松解码和编码此类格式。除了你的 + Jeremy 的解决方案,如果格式无效,这个包还会给出准确的错误消息,支持多行记录并正确取消引用字符串。

基本用法如下:

package main

import (
"encoding/csv"
"fmt"
"io"
"os"
)

func main() {
file, err := os.Open("names.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
reader := csv.NewReader(file)
for {
record, err := reader.Read()
if err == io.EOF {
break
} else if err != nil {
fmt.Println("Error:", err)
return
}

fmt.Println(record) // record has the type []string
}
}

还有一个ReadAll假设整个文件都适合内存,这种方法可能会使您的程序更短。

更新:dystroy 刚刚指出您的文件无论如何只有一行。 CSV 阅读器也适用于此,但以下不太通用的解决方案也应该足够了:

for {
if n, _ := fmt.Fscanf(file, "%q,", &name); n != 1 {
break
}
fmt.Println("name:", name)
}

关于strings.Go 中的拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11462879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com