Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按字符数拆分字符串并存储在字符串数组中_C# - Fatal编程技术网

C# 按字符数拆分字符串并存储在字符串数组中

C# 按字符数拆分字符串并存储在字符串数组中,c#,C#,我有一根这样的绳子 abcdefghij 我不是要把这个字符串每个拆分3个字符。 我想要的输出将是一个包含以下内容的字符串数组 abc def ghi j 可以使用string.Split()方法?IEnumerable Split(string str){ IEnumerable<string> Split(string str) { for (int i = 0; i < str.Length; i += 3) yield return str.

我有一根这样的绳子

abcdefghij
我不是要把这个字符串每个拆分3个字符。 我想要的输出将是一个包含以下内容的字符串数组

abc
def
ghi
j
可以使用
string.Split()
方法?

IEnumerable Split(string str){
IEnumerable<string> Split(string str) {
    for (int i = 0; i < str.Length; i += 3)
        yield return str.Substring(i, Math.Min(str.Length - i, 3));
}
对于(int i=0;i
不,我不相信只使用
string.Split()
是可能的。但创建自己的函数非常简单

string[] MySplit(string input)
{
   List<string> results = new List<string>();
   int count = 0;
   string temp = "";

   foreach(char c in input)
   {
      temp += c;
      count++;
      if(count == 3)
      {
         result.Add(temp);
         temp = "";
         count = 0;
      }
   }

   if(temp != "")
      result.Add(temp);

   return result.ToArray();
}
string[]MySplit(字符串输入)
{
列表结果=新列表();
整数计数=0;
字符串temp=“”;
foreach(输入中的字符c)
{
温度+=c;
计数++;
如果(计数=3)
{
结果。添加(温度);
温度=”;
计数=0;
}
}
如果(温度!=“”)
结果。添加(温度);
返回result.ToArray();
}

此代码将字符分成3组,并将每组转换为字符串

string s = "abcdefghij";

var split = s.Select((c, index) => new {c, index})
    .GroupBy(x => x.index/3)
    .Select(group => group.Select(elem => elem.c))
    .Select(chars => new string(chars.ToArray()));

foreach (var str in split)
    Console.WriteLine(str);
印刷品

abc
def
ghi
j
Fiddle:

IEnumerable GetNextChars(字符串str,int iterateCount)
{
var words=新列表();
for(int i=0;i=iterateCount)words.Add(str.Substring(i,iterateCount));
添加(str.Substring(i,str.Length-i));
返回单词;
}

这将避免@Sajeetharan的答案中出现
ArgumentOutOfRangeException

编辑:很抱歉,我之前的回答完全是愚蠢的:)这应该可以达到目的。

使用一点Linq

static IEnumerable<string> Split(string str)
{
    while (str.Length > 0)
    {
        yield return new string(str.Take(3).ToArray());
        str = new string(str.Skip(3).ToArray());
    }
}
静态IEnumerable拆分(字符串str)
{
而(str.Length>0)
{
返回新字符串(str.Take(3.ToArray());
str=新字符串(str.Skip(3.ToArray());
}
}

以下是您的示例中的

是要在每三个位置拆分它,还是要在特定字符后拆分它,如
c
f
i
?字符串。拆分(…)至少需要一个字符,因此我不知道如何使用它。如何将String.Substring(…)与一个简单循环结合使用?请参见疯狂方式
String[]t=Regex.Matches(“abcdefghij”,“{1,3}”).Cast().Select(m=>m.Value.ToArray()@UlugbekUmirov:是的。。。非常疯狂的
ArgumentOutOfRangeException
-1这对OPI提供的输入示例不起作用。我会使用字符串生成器或
字符[]
,而不是像这样重复连接。@Rawling:可能。。。在我看来,这真的不值得担心,但如果它符合你的喜好,那么采取额外的步骤显然没有坏处。不需要
.tocharray()
。对我来说似乎有点过头了。。。只是为了使用LINQ@UlugbekUmirov很好,这不是为了使用Linq,而是为了清晰易读。将字符分组为3组,然后合并字符。对我来说似乎很简单。你的代码解决了我的问题。thx uDoesn甚至没有编译。。。返回类型不匹配。出于某种原因,@Sajeetharan删掉了使这项工作成功的关键部分,这使得他们的答案变得更加糟糕。你需要做的就是在你以前的答案中添加
yield
)遗憾的是,我不知道
yield
关键字的用法。我一定会调查的。谢谢
static IEnumerable<string> Split(string str)
{
    while (str.Length > 0)
    {
        yield return new string(str.Take(3).ToArray());
        str = new string(str.Skip(3).ToArray());
    }
}