目录
问题背景
比如有的字符串长这样:
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
}
如果你的需要是只针对多个换行而不需要操心空格的影响,则稍微改下逻辑就可以了。如果完全不需要保留换行那就更简单了。
如果对你有帮助,欢迎留下足迹哦!