简体   繁体   English

使用LINQ如何分割字符串(不是在字符上而是在索引上)

[英]Using LINQ how to split string (not on character but on index)

I wanted to split a string 我想分割一个字符串

Input : 输入:

ABCDEFGHI

Output : 输出:

ABC, DEF, GHI

One way is by using For Loop. 一种方法是使用For循环。

string str = "ABCDEFGHI";

List<string> lst = new List<string>();

string temp = "";

for(int i = 0; i < str.Length; i++)
{
    temp = str[i].Tostring();

    if((i + 1) % 3 == 0)
    {
        lst.Add(temp);
        temp = "";
    }
}

string final_str = string.Join(", ", lst);

But how to do that using LINQ ? 但是如何使用LINQ做到这一点?

var str = "ABCDEFGHI";

var result = testStr.Select(s => testStr.IndexOf(s))
                   .Where(i => i%3 == 0)
                   .Select(i => testStr.Substring(i,3))
                   .Aggregate("", (a,s) => a += s + ",");

MoreLinq的帮助下

List<string> lst = str.Batch(3).Select(s => String.Join("",s)).ToList();

And another one ( without MoreLinq ): 还有一个( 没有 MoreLinq ):

var str = "ABCDEFGHI";
var tmp = str.Select((i, index) => new { i, index })
             .GroupBy(g => g.index / 3, e => e.i)
             .Select(g => String.Join("", g));
var final_string = String.Join(", ", tmp);

using MoreLinq.Batch 使用MoreLinq.Batch

var result = str.Batch(3);

type of result is IEnumerable>, ToArray can be used to make it IEnumerable< char[] > 结果类型为IEnumerable>,可以使用ToArray使其成为IEnumerable <char []>

EDIT I forgot last join statement in the first glance 编辑我乍一看忘记了最后一个加入语句

var finalStr = String.Join(",",str.Batch(3).Select(x=>new String(x.ToArray())))
String.Join("", str.Select((x, i) => (i + 1)%3 == 0 ? x + " " : x.ToString()))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM