一道算法题-解析字符串

输入文件构成规则如下:

  1. 每⾏代表⼀条记录,字段之间以逗号(,)分隔
  2. 若字段内容包含逗号(,),则以双引号包围该字段
  3. 若字段内容包含双引号("),则以双引号包围该字段,字段内的双引号由⼀个变两个
    请参照上⾯三条规则,编写⼀个解析程序,将解析后的记录内容按⾏输出,字段之间以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
}

输出截图如下:

在这里插入图片描述

如有不对之处,请指正
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值