C# 什么';合并字符串的最佳方法是什么?

C# 什么';合并字符串的最佳方法是什么?,c#,string,coding-style,C#,String,Coding Style,假设我有一个foreach循环,其字符串如下: String newStr=''; String str='a b c d e'; foreach(String strChar in str.split(' ')) { newStr+=strChar+','; } 结果可能是这样的:a,b,c,d,e,,但我想要的是a,b,c,d,e,没有最后一个逗号。我通常会把最后一个逗号划掉,但这看起来很难看也很超重。有没有轻量级的方法可以做到这一点 除此之外:是否有任何简单的解决方案可以在星座图中添

假设我有一个foreach循环,其字符串如下:

String newStr='';
String str='a b c d e';
foreach(String strChar in str.split(' ')) {
  newStr+=strChar+',';
}
结果可能是这样的:
a,b,c,d,e,
,但我想要的是
a,b,c,d,e
,没有最后一个逗号。我通常会把最后一个逗号划掉,但这看起来很难看也很超重。有没有轻量级的方法可以做到这一点

除此之外:是否有任何简单的解决方案可以在星座图中添加一个“and”,结果类似于:
a、b、c、d和e
,用于用户输出


p、 s:我知道我可以在示例中使用replace方法,但这不是我想要的,因为在大多数情况下,您不能使用它(例如,当您构建sql字符串时)。

我会使用
string.Join

string newStr = string.Join(",", str.Split(' '));
或者,您可以在循环体的开头添加分隔符,但不能在第一次循环中添加分隔符

如果您想继续手工操作,我建议您使用
StringBuilder
。事实上,使用
StringBuilder
可以无条件地附加分隔符,然后减少末端的长度以修剪该末端

你还写道:

例如,当您构建sql字符串时

像这样构建SQL字符串很少是个好主意。特别是,您应该绝对不要在此处使用来自用户输入的字符串-使用参数化SQL。构建SQL通常是ORM代码的领域。。。在这种情况下,使用现有的ORM通常比使用自己的ORM更好:)

可能是您的朋友:

String str='a b c d e';
var newStr = string.Join(",", str.Split(' '));

首先,您应该使用StringBuilder进行此类字符串操作。第二,它只是一个以插入为条件的if

System.Text.StringBuilder newStr = new System.Text.StringBuilder("");
string oldStr = "a b c d e";

foreach(string c in oldStr.Split(' ')) {
    if (newStr.Length > 0) newStr.Append(",");
    newStr.Append(c);
}

您可以使用
Regex
并用逗号替换空白

string newst = Regex.Replace(input, " ", ",");

下面是如何在最后一个值之前有“and”的位置执行此操作

var vals = str.Split(' ');
var ans = vals.Length == 1 ?
          str :
          string.Join(", ", vals.Take(vals.Length - 1))) + ", and " + vals.Last();

您将问题描述为在除最后一个字符串之外的每个字符串后面附加逗号。把它描述为在每个字符串之前加一个逗号,但是第一个。这是一个更容易的问题

至于你更难的版本,在我的博客和这个问题上有几十个解决方案


什么是ORM?对象角色建模?我正在使用LINQ。这是ORM吗?@Janhomes:是的。(或者更确切地说,LINQ有几种不同的风格,但大多数与db相关的都可以算作ORM。)如果您使用LINQ,为什么还要自己创建SQL语句?在动态创建的网格上进行全文搜索。这不是SQL,而是类似SQL的动态LINQ。有没有更好的全文搜索解决方案?@JanHommes:我们需要更多地了解你到底在做什么。。。但一般来说,查询不需要在字符串中包含值。它充满了问题。当有
string.Replace
且表达式如此简单时,为什么还要麻烦使用
Regex.Replace
var vals = str.Split(' ');
var ans = vals.Length == 1 ?
          str :
          string.Join(", ", vals.Take(vals.Length - 1))) + ", and " + vals.Last();