0
点赞
收藏
分享

微信扫一扫

go语言修改/去除字符串多个换行符为一个

亿奇学 2022-01-06 阅读 69

目录

问题背景

解决


问题背景

比如有的字符串长这样:

xxxxxxx

yyyyyy:  xxxxx


yyyyyy:  xxxxx



yyyyyy:  xxxxx

每行内容之间有多个换行,而我们大多数时候想要的是这种:

xxxxxxx
yyyyyy:  xxxxx
yyyyyy:  xxxxx
yyyyyy:  xxxxx

也就是内容之间保留一个换行就可以了!

这时候基于常用的函数和\n来判断可能是判断不到的,自己遇到后经过分析,写出算法分享给大家,希望能尽快解决大家的类似的问题。

解决

如果用常用的字符串函数无法判断换行时,就不能用string来操作了,先转为[]rune看看,比如我这个字符串中的四个换行是这样的:

10 32 10 32 10 32 10 32

其中10是换行,32是空格,而且要保留第一个换行、且去除完多余换行后每行内容左端都需要对齐,因此算法如下:


func TrimWrap(src string) (dist string) {
   if len(src) == 0 {
      return
   }

   r, distR := []rune(src), []rune{}
   var m, k, n int32
   for i := 0; i < len(r); i++ {
      if i == 1 && len(r) == 2{
         if r[i] == 10 && r[i-1] == 10 {
            continue
         }
      }

      if i >= 2 {
         m, k, n = r[i-2], r[i-1], r[i]
      }

      if m == 10 && n == 10 && k == 32 {
         continue
      }

      if m == 32 && n == 32 && k == 10 {
         continue
      }

      distR = append(distR, r[i])
   }

   dist = string(distR)
   return
}

如果你的需要是只针对多个换行而不需要操心空格的影响,则稍微改下逻辑就可以了。如果完全不需要保留换行那就更简单了。

如果对你有帮助,欢迎留下足迹哦!

举报

相关推荐

0 条评论