输入文件构成规则如下:
- 每⾏代表⼀条记录,字段之间以逗号(,)分隔
- 若字段内容包含逗号(,),则以双引号包围该字段
- 若字段内容包含双引号("),则以双引号包围该字段,字段内的双引号由⼀个变两个
请参照上⾯三条规则,编写⼀个解析程序,将解析后的记录内容按⾏输出,字段之间以TAB(\t)分 隔
Plain Text ⽰例:
John,33,"⾜球,摄影",New York
John,33,"⾜球,""摄影",New York
输出:
John 33 ⾜球,摄影 New York
John 33 ⾜球,"摄影 New York
Plain Text 输⼊:
2,John,45,"⾜球,摄影",New York
3,Carter Job,33,"""健⾝"",远⾜","河北,⽯家庄"
4,Steve,33,"⼤屏幕164""","DC""Home"""
5,"Jul,y",33,Football,Canada 1234
求输出!
思路:
1、看到题目首先想到这道题可能与有效括号解法相同
2、但是其中收到"“的影响,且双引号中的字符,不能切割
3、所以我们先排除影响我们的”",在按照有小括号类似的处理办法进行处理即可
代码如下:
func main() {
var s = []string{
"John,33,\"⾜球,摄影\",New York ",
"John,33,\"⾜球,\"\"摄影\",New York",
"2,John,45,\"⾜球,摄影\",New York ",
"3,Carter Job,33,\"\"\"健⾝\"\",远⾜\",\"河北,⽯家庄\"",
"4,Steve,33,\"⼤屏幕164\"\"\",\"DC\"\"Home\"\"\"",
"5,\"Jul,y\",33,Football,Canada",
}
for _, v := range s {
fmt.Println(Decode(v))
}
}
func Decode(s string) string {
Str := strings.Replace(s, `""`, `-`, -1)
var a = true
var s1 string
for _, v := range Str {
if v == ',' && a {
s1 += "\t"
} else if v == '"' && a {
a = false
} else if v == '"' && !a {
a = true
} else {
s1 += string(v)
}
}
outStr := strings.Replace(s1, `-`, `"`, -1)
return outStr
}