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)));