java字符串转换为指定长度的数组_字符串按长度转换成数组

今天群里人突然发问形如var s = "abcdefghijklmn"; 有什么简单的办法分组字符串?

第一想到的肯定是字符串分割split,但是这个貌似和我们平常用的区别很大呀,没有单字符做截取依据嘛。去查找发现有个Regex.Split方法,噢~貌似这个可以做到哦。

Ok,我们查看下Regex.Split提供了2个重载方法,这个我们用三个参数的重载方法,其实主要的就是这里的正则写法直接给出不多做解释了(?<=\G.{3})

List str2 = new List(Regex.Split(str, @"(?<=\G.{3})", RegexOptions.Singleline));

(3是指 33分组,下面的都是一样的)

同样的逻辑我们可以想到通过正则可以匹配所有的字符串出来,Regex.Matches(input,pattern) ,但是这个返回的是MatchCollection 集合,ok 一样的利用linq我们来取出数据

var str2=(from Match m in Regex.Matches(str, @"\w{1,3}")select m.Value).ToList()

既然linq 我们都用的这么多了,那linq里的Enumerable 应该或多或少接触了那么一些,像Repeat、Reverse等等这些确实提供了我们诸多的方便,刚开始立马想到了累加器的使用Aggregate((m,n)=>{//do something}),像在每个组的字符串后面增加一个

‘,’分隔符然后split一下的,后来也就放弃了,看到老外有个用skip来截取然后转化成数组的也挺好,遂稍微改了一下直接贴上来供大家参考

double chunkSize = 3;var str2 = Enumerable.Range(0, (int)Math.Ceiling(str.Length /chunkSize))

.Select(i=> new string(str.Skip(i * (int)chunkSize).Take((int)chunkSize).ToArray()));

说实话本人不建议这种写法,代码太多,里面又掺杂类型转换。

最后一种说实话 我都没接触过,这个也是看老外写的,用了第三方的类库Morelinq,morelinq里面提供了一个batch方法可以很容易的做到这些

var str2=str.Batch(3, chars => new String(chars.ToArray()));

这个实在是太简洁了,唯一的缺憾就是引入了第三方的类库,也不推荐。

c27760d3134d8c1d2bdeb6c36f9c173a.png

以上共4种方法,从个人角度来看,推荐大家使用正则,及上图中的第三种,其他三种方法不是引入了第三方类库,就是代码方法太生僻,希望能给大家带来些许的灵感,欢迎拍砖。

5726378.html

5726378.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值