文件names.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)
}
问题 你想拆分一个字符串。 解决方案 使用 JavaScript 字符串的 split() 方法: "foo bar baz".split " " # => [ 'foo', 'bar', 'baz' ] 讨论 String 的这个 split() 方法是标准的 JavaScript 方法。可以用来基于任何分隔符——包括正则表达式来拆分字符串。这个方法还可以接受第二个参数,用于指定返回的子字符串数
问题内容: 我从网上得到一个字符串,看起来像这样: 然后,我需要将,和存储在不同的变量中,但是它将不起作用。 现在它只存储整个字符串 怎么了? 问题答案: 该参数是一个普通表达式,在那里有特殊含义;“开始的锚” 您需要做: 通过转义,您是在说“我的意思是字符’^’”
我有一个字符串,,我想把它分成两个字符串: 这意味着第一个字符串将包含之前的字符,第二个字符串将包含之后的字符。我还想检查字符串中是否有。如果没有,我会抛出一个异常。我该如何做到这一点?
问题内容: 我有一个名为的字符串,其形式像这样 。 我想使用:分隔符。 这样一来,单词将被拆分成自己的字符串,并将成为另一个字符串。 然后我只想使用2种不同的字符串来显示该字符串。 解决这个问题的最佳方法是什么? 问题答案: 你可能要删除第二个字符串的空格: 如果要用特殊字符(例如dot(。))分割字符串,则应在点之前使用转义字符\ 例: 还有其他方法可以做到这一点。例如,你可以使用类(来自):
问题内容: 如何在PHP中使用定界符分割字符串?例如,如果我有字符串,我如何得到? 问题答案: 做这项工作: 您还可以直接将部分结果提取到变量中:
我正在使用拆分一个字符串。我收到的字符串有这样的结构: 其中<代码> 除非是空字符串,否则这可以正常工作。在这种情况下,只会跳过数据。 我想要一个字符串,如<代码>[数据] 我该怎么做?