Go面试题-解析输入字符串行数据字段信息

news/2025/3/14 21:38:10/

同事分享了一道Go的算法面试题,下面是基于字符串分析的go代码,在写的时候特意将最后一行数据加大复杂度,给大家分享一下:

字符输入规则如下:

a. 每行表示一条记录,字段之间以逗号(,)分隔。

b. 如果字段内容包含逗号(,),则需使用双引号(")包裹。

c. 如果字段内容包含双引号("),则需使用两个双引号("")进行转义并用双引号包裹。

4. 编写解析程序,将解析后的内容按行输出,字段之间以制表符(\t)分隔。

5. 以下是一个示例:

1)输入:Linda,47,"旅游,""攀岩",New Job

2)输出:Linda 47 旅游,"攀岩 New Job

rows := `2,Tina,37,"足球,""篮球",Old Job

3,Alice Job,66,"""看电影"",旅游","上海,上海市"

4,John,44,"洗衣机101,""","LA""CITY"""

5,"Jane,li",55,Hiking,Canada`       加大难度,修改为     5,"Jane,Li""",55,Hiking,""",Canada"

本题解析思路如下:

1,按行读取数据

2,每行按字符解析

        2.1 记录 " 第1次出现的索引left,计数  " 出现的 total 数量,每次分割的 逗号 索引 lastSplit

        2.2 遇到 逗号,如果 之前没有 " ,则left还是默认-1,可以直接分割字段

        2.3 遇到 逗号,如果 之前出现的 " 总数total为 偶数,则也可以直接分割字段,并重置left  total 变量

        2.4 当解析到行的最后一个字符时,分为是 " 和 非 " 两种情况

package mainimport ("fmt""strings"
)func main() {rows := `2,Tina,37,"足球,""篮球",0ld Job
3,ALice Job,66,"""看电影"",旅游","上海,上海市"
4,John,44,"洗衣机101,""","LA""CITY"""
5,"Jane,Li""",55,Hiking,""",Canada"`rowSlice := strings.Split(rows, "\n")res := make([][]string, 0)for _, v := range rowSlice {left := -1 // 第一次遇到 " 时索引total := 0 // 已经出现的 " 个数row := make([]string, 0)lastSplit := 0 // 上一次出现 分割字段的 开始索引for i := 0; i < len(v); i++ {if v[i] == ',' && left < 0 {row = append(row, string(v[lastSplit:i]))lastSplit = i + 1continue}if v[i] == '"' {total += 1if left < 0 {left = i}if i == len(v)-1 {row = append(row, string(v[left+1:i]))break}}if v[i] == ',' {if total%2 == 0 && left > 0 {row = append(row, string(v[left+1:i-1]))left = -1total = 0lastSplit = i + 1continue}}if i == len(v)-1 {row = append(row, string(v[lastSplit:]))}}res = append(res, row)}for _, v := range res {fmt.Println(strings.Join(v, "\t"))}
}

最终输出

2        Tina        37        足球,""篮球        0ld Job

3        ALice Job        66        ""看电影"",旅游        上海,上海市

4        John        44        洗衣机101,""        LA""CITY""

5        Jane,Li""        55        Hiking        "",Canada


http://www.ppmy.cn/news/39423.html

相关文章

Redis中的BigKey问题:排查与解决思路

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 文章目录摘要Big Key问题介绍Big Key问题排查使用BIGKEYS命令Debug Objectmemory usageredis-rdb-toolsBig Key问题解决思路分割大key对象压缩直接删除总结摘要 Redis是一款性能强劲的内存数据库&#xff0c…

URL编码和解析

1.什么是URL&#xff1f; URL(Uniform Resource Locator&#xff0c;统一资源定位符)是互联网上标准资源的地址&#xff0c;互联网上每个文件(即资源)都有一个唯一的URL&#xff0c;它包含了文件的位置以及浏览器处理方式等信息。 URL 标准格式 通常而言&#xff0c;我们所熟…

数据处理-4.现代企业的核心公式

现代企业核心公式&#xff1a;收入流量付费率 ARPU ARPU即Average Revenue Per User&#xff0c;指的是一个时期内(通常为一个月或一年)电信运营企业平均每个用户贡献的通信业务收入&#xff0c;其单位为元/户。从计算的角度看&#xff0c;ARPU值的大小取决于两个因素&#xff…

Android之制作App的图标

在过去&#xff0c;Android应用程序的图标都是应该放到相应的分辨率的mipmap目录下&#xff0c;不过从Android8.0开始&#xff0c;Google已经不再建议使用单一的一张图片来作为应用程序的图标&#xff0c;而是应该使用前景和背景分离的图标设计方式。具体来讲&#xff0c;应用程…

【python设计模式】18、仲裁者模式

哲学思想&#xff1a; 仲裁者模式是一种软件设计模式&#xff0c;它的哲学思想是将对象之间的交互行为转移到第三方对象&#xff0c;以避免直接耦合。该模式的核心思想是&#xff1a;当对象之间需要通信时&#xff0c;它们不直接相互交互&#xff0c;而是通过一个中介者对象来…

电脑+浏览器——黑色护眼

电脑浏览器——黑色护眼电脑办公Excel主题&#xff0c;黑色表格&#xff0c;黑色背景电脑办公 Excel https://www.kewenba.com/12562.html 主题&#xff0c;黑色 表格&#xff0c;黑色背景 【页面布局】-【背景】&#xff0c;然后选择一张黑色图片

web基础

web基础 与http 域名&#xff1a;由于IP地址不易记忆&#xff0c;域名用来代替IP地址&#xff0c; &#xff08;DNS&#xff09;服务与配置&#xff1a;先在本地hosts里去找&#xff0c;然后在本地域名服务器递归查找&#xff0c;本地域名服务器在一级二级按域名长度迭代查找后…

STM32F4_串口通信详解

目录 1. 串口相关介绍及使用 1.1 串口设置的一般步骤&#xff1a; 1.1.1 串口时钟和GPIO时钟使能 1.1.2 设置引脚复用器映射 1.1.3 GPIO端口模式设置 1.1.4 串口参数初始化 1.1.5 开启中断并且初始化NVIC&#xff0c;使能中断 1.1.6 使能串口 1.1.7 串口数据发送与接收…