文件names.txt由以下形式的许多名称组成:
"KELLEE","JOSLYN","JASON","INGER","INDIRA","GLINDA","GLENNIS"
Run Code Online (Sandbox Code Playgroud)
有谁知道如何分割字符串,以便它是由逗号分隔的个别名称?
KELLEE,JOSLYN,JASON,INGER,INDIRA,GLINDA,GLENNIS
Run Code Online (Sandbox Code Playgroud)
下面的代码用逗号分割,并在名称周围留下引号,拆分的转义字符是什么".可以在一个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)
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这是Project Euler问题#22的一部分.http://projecteuler.net/problem=22
tux*_*21b 18
Jeremy的答案基本上是正确的,并且完全符合您的要求.但是"names.txt"文件的格式实际上是众所周知的,称为CSV(逗号分隔值).幸运的是,Go附带了一个编码/ 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
}
}
Run Code Online (Sandbox Code Playgroud)
假设整个文件适合内存,还有一个ReadAll方法可能会使您的程序更短.
更新: dystroy刚刚指出你的文件只有一行.CSV阅读器也适用于此,但以下不太通用的解决方案也应该足够:
for {
if n, _ := fmt.Fscanf(file, "%q,", &name); n != 1 {
break
}
fmt.Println("name:", name)
}
Run Code Online (Sandbox Code Playgroud)
拆分不会从子字符串中删除字符.您的拆分很好,您只需要使用strings.Trim(val,"\"")处理切片.
for i, val := range arr {
arr[i] = strings.Trim(val, "\"")
}
Run Code Online (Sandbox Code Playgroud)
现在arr将删除前导和尾随.
| 归档时间: |
|
| 查看次数: |
18785 次 |
| 最近记录: |