合并字符串的最佳方法是什么?

时间:2013-02-14 14:00:03

标签: 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没有最后一个逗号。我通常将最后一个逗号分开,但这看起来很丑陋和超重。有没有轻量级的方法来做到这一点?

此问题的补充:是否有任何简单的解决方案可以在星座中添加“和”,结果类似于:a, b, c, d and e用于用户输出?

ps:我知道我可以在示例中使用replace-method但这不是我正在寻找的,因为在大多数情况下你不能使用它(例如,当你构建一个sql字符串时)。

7 个答案:

答案 0 :(得分:11)

我会使用string.Join

string newStr = string.Join(",", str.Split(' '));

或者,您可以在循环体的 start 处添加分隔符,但第一次

如果您想继续这样做,我建议您使用StringBuilder。实际上,使用StringBuilder,您可以无条件地附加分隔符,然后在末尾递减长度以修剪该末尾。

您还写道:

  

例如,当您构建一个sql字符串

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

答案 1 :(得分:4)

您将问题描述为在除了最后一个字符串之外的每个字符串后附加逗号。考虑将其表征为在每个字符串之前添加逗号但是第一个字符串。这是一个更容易解决的问题。

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

Eric Lippert's challenge "comma-quibbling", best answer?

答案 2 :(得分:2)

string.Join可能是你的朋友:

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

答案 3 :(得分:2)

以下是在最后一个值之前有“和”的地方。

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

答案 4 :(得分:1)

newStr = String.Join(",", str.split(' '));

答案 5 :(得分:1)

您可以使用Regex并用逗号

替换空格
string newst = Regex.Replace(input, " ", ",");

答案 6 :(得分:0)

首先,您应该使用StringBuilder进行此类字符串操作。其次,它只是插入条件的条件。

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