C# 在3个逗号后添加换行符

C# 在3个逗号后添加换行符,c#,linq,C#,Linq,我有一根像 "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33" 我想在3个逗号后加上换行符 "tom: 1, john: 3, timmy: 5, </br> cid: 8, ad: 88, hid: 99, </br> mn: 33" “汤姆:1,约翰:3,蒂米:5,cid:8,ad:88,hid:99,mn:33” 我相信for循环将是最直接、最清晰的解决方案,但使用LINQ做这件事很有趣: s

我有一根像

"tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33"
我想在3个逗号后加上换行符

"tom: 1, john: 3, timmy: 5, </br> cid: 8, ad: 88, hid: 99, </br> mn: 33"
“汤姆:1,约翰:3,蒂米:5,
cid:8,ad:88,hid:99,
mn:33”
我相信
for
循环将是最直接、最清晰的解决方案,但使用LINQ做这件事很有趣:

string input = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33";
char delimiter = ',';
var allParts = input.Split(delimiter);
string result = allParts.Select((item, index) => (index != 0 && (index+1) % 3 == 0)
                    ? item + delimiter + " </br>"
                    : index != allParts.Count() - 1 ? item + delimiter : item)
                    .Aggregate((i, j) => i + j);

// result (without a comma after the last item)
// "tom: 1, john: 3, timmy: 5, </br> cid: 8, ad: 88, hid: 99, </br> mn: 33"
string input=“汤姆:1,约翰:3,蒂米:5,cid:8,ad:88,hid:99,mn:33”;
字符分隔符=',';
var allParts=input.Split(分隔符);
字符串结果=所有部分。选择((项目,索引)=>(索引!=0&&(索引+1)%3==0)
?项目+分隔符+“
” :index!=allParts.Count()-1?项+分隔符:项) .骨料((i,j)=>i+j); //结果(最后一项后不带逗号) //“汤姆:1,约翰:3,提米:5,
cid:8,ad:88,hid:99,
mn:33”
根据我有限的编程知识,我会使用int来计算已经写了多少个名称。(int namecont=0)。每次我写一个名字时,如果它小于3,我会增加计数器,否则我会放一个换行符。

string[]parts=yourString.Split(',');
string [] parts = yourString.Split(',');
StringBuilder result = new StringBuilder();

for(int i = 0; i < parts.Length; i++)
{
  result.Append(parts[i]);
  if(i % 3 == 0)
  {
    result.Append("<br />");
  }
}
StringBuilder结果=新建StringBuilder(); 对于(int i=0;i”); } }
如果我得到了您想要的,您可以在foreach中使用indexof,然后执行类似操作:

strTarget.Insert(strTarget.IndexOf(thirdCommand),“”)

我想你可以用它来创造一些逻辑:

阿德玛试试这个

 string[] split = textBox1.Text.Split(',');
             int count =0;
             for (int i = 0; i < split.Length; i++)
             {
                 count+=1;
                 if (i < split.Length - 1)
                 {
                     textBox2.Text += split.GetValue(i) + ",";
                 }
                 else
                 {
                     textBox2.Text += split.GetValue(i);
                 }
                 if (count == 3)
                 {
                     count = 0;
                     textBox2.Text += " </br> ";
                 }
             }
string[]split=textBox1.Text.split(',');
整数计数=0;
for(int i=0;i”;
}
}

使用以下代码部分,它将正常工作

string input = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33";
            string[] parts = input.Split(','); 
            StringBuilder result = new StringBuilder();
            int i = 1;
            while(i <= parts.Length) 
            {
                result.Append(parts[i-1] + ","); 
                if (i % 3 == 0)
                {
                    result.Append("<br />");
                }
                i++;
            }

对于LINQ解决方案,我能做的最好的事情是:

    var count = 0;
    input.Aggregate(
        new StringBuilder(),
        (sb, ch) =>
        {
            sb.Append(ch);
            if (ch == ',' && ++count % 3 == 0) sb.Append(" </br>");
            return sb;
        }).ToString();
var计数=0;
输入.聚合(
新建StringBuilder(),
(sb,ch)=>
{
某人附加(ch);
如果(ch==','&&&++计数%3==0)sb.追加(
”; 归还某人; }).ToString();
这将为您提供所需的输出:

        string combinedValues = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33";
        string[] separatedValues = combinedValues.Split(',');
        for (int i = 3; i < separatedValues.Count(); i = i + 3)
        {
            separatedValues[i] =  @"<br />" + separatedValues[i];
        }
        StringBuilder sb = new StringBuilder();
        foreach (string value in separatedValues)
        {
            sb.Append(value);
            sb.Append(@",");
        }
        string combinedValuesWithBreak = sb.ToString();
string combinedValues=“汤姆:1,约翰:3,蒂米:5,cid:8,ad:88,hid:99,mn:33”;
字符串[]separatedValues=combinedValues.Split(',');
对于(int i=3;i”+分隔值[i];
}
StringBuilder sb=新的StringBuilder();
foreach(separatedValues中的字符串值)
{
附加(价值);
某人加上(@“,”);
}
字符串组合值swithbreak=sb.ToString();
字符串拆分器=“,”;
字符串换行符=“
”; int-splitAfter=3; string s=“汤姆:1,约翰:3,蒂米:5,cid:8,ad:88,hid:99,mn:33”; 字符串x= s、 Split(新[]{splitter},StringSplitOptions.None)//Split //使每个字符串条目成为包含字符串本身的元组 //和一个整数键,声明它属于哪个组 .选择((v,i)=> 新元组((int)数学层((double)i/splitAfter),v)) //按上面一行中创建的键分组 .GroupBy(kvp=>kvp.Item1) //因为不再需要键,所以只选择字符串值 .Select(g=>g.Select(kvp=>kvp.Item2) //加入团体 //(在您的示例中,每个组是3个元素的集合) .骨料((a,b)=>a+分离器+b)) //加入所有组并在其中添加新行 .聚合((a,b)=>a+拆分器+换行符+b);
这是用LINQ的“一行”来实现的。尽管我不太确定这是否真的是可取的,因为其他开发人员可能很难一眼就理解这里发生的事情(特别是如果您对LINQ及其GroupBy函数没有太多经验的话)。

string line=“tom:1,john:3,timmy:5,cid:8,ad:88,hid:99,mn:33”;
Regex Regex=new Regex(@“(\w+?:\s+\d+,\s){3}”);
字符串结果=regex.Replace(第“$&
”行);
作为另一个选项(虽然
for
循环方法的性能会更好,但我喜欢它有多短)

假设有这样一种扩展方法:

public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int chunkSize)
{
    return source.Where((x,i) => i % chunkSize == 0).Select((x,i) => source.Skip(i * chunkSize).Take(chunkSize));
}
公共静态IEnumerable拆分(此IEnumerable源代码,int-chunkSize)
{
返回source.Where((x,i)=>i%chunkSize==0)。选择((x,i)=>source.Skip(i*chunkSize)。获取(chunkSize));
}
它将一个
IEnumerable
分解为一个
IEnumerable
,您可以使用以下命令:

var s = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33";
var result = string.Join(", </br>", s.Split(',').Split(3).Select(x => string.Join(",", x)));
var s=“汤姆:1,约翰:3,蒂米:5,cid:8,ad:88,hid:99,mn:33”;
var result=string.Join(“,
”,s.Split(“,”).Split(3)。选择(x=>string.Join(“,”,x));
请不要在家工作,让我们知道您到目前为止尝试了什么。最后一项
mn:33
是否会后跟逗号
?您的代码不会给出他想要的输出,请检查一次。最终结果集应该包含逗号符号
哦,忘记逗号了@skk的答案比我的好。@Bismark:我不同意后者,因为你的答案更清楚。我宁愿为循环保留如此简单的
,而不是为如此简单的循环保留凌乱的LINQ查询case@sll,skk的答案没有涉及LINQ。它基本上使用了几乎相同的循环,但也添加了逗号。最后一项
mn:33
是否会后跟逗号
symbol?看起来您在
spliterAfter
variabl中有输入错误
string line ="tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33";
Regex regex = new Regex(@"(\w+?:\s+\d+,\s){3}");
string result = regex.Replace(line, "$&<br /> ");
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int chunkSize)
{
    return source.Where((x,i) => i % chunkSize == 0).Select((x,i) => source.Skip(i * chunkSize).Take(chunkSize));
}
var s = "tom: 1, john: 3, timmy: 5, cid: 8, ad: 88, hid: 99, mn: 33";
var result = string.Join(", </br>", s.Split(',').Split(3).Select(x => string.Join(",", x)));