go string split

按任意字符串分割,示例按%;%分割

package main

import (
	"bufio"
	"bytes"
	"fmt"
	"strings"
)

func main() {
	str := `asd;%;%1f{"/"};%sd`
	sr := strings.NewReader(str)
	scanner := bufio.NewScanner(sr)
	scanner.Split(SplitFunc("%;%"))
	for scanner.Scan() {
		text := scanner.Text()
		fmt.Println(text)
	}
}

func SplitFunc(delim string) bufio.SplitFunc {
	ln := len(delim)
	delimbs := []byte(delim)
	return func(data []byte, atEOF bool) (advance int, token []byte, err error) {
		if atEOF && len(data) == 0 {
			return 0, nil, nil
		}
		if i := bytes.Index(data, delimbs); i >= 0 {
			return i + ln, data[0:i], nil
		}
		if atEOF {
			return len(data), data, nil
		}
		return 0, nil, nil
	}
}

输出

asd;
1f{"/"};%sd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值