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

问题描述:

比方说,我有一个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用户输出?

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

我会用string.Join

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

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

如果你想继续这样做,我会建议使用StringBuilder。实际上,对于StringBuilder,您可以无条件地追加分隔符,然后在最后减少长度以修剪该结尾。

您还写道:

例如,当你建立一个SQL字符串

这是很少构建SQL字符串这样一个好主意。尤其是,您应该绝对使用而不是使用来自用户输入的字符串 - 使用参数化的SQL。构建SQL是典型的ORM代码域......在这种情况下,它通常是更好地使用现有的ORM,而不是推出自己的:)

+0

什么是ORM?对象角色建模? – 2013-02-14 14:09:28

+0

@JanHommes http://en.wikipedia.org/wiki/Object-relational_mapping – asawyer 2013-02-14 14:14:16

+0

我使用LINQ。这是一个ORM吗? – 2013-02-14 14:16:19

string.Join可能是您的朋友:

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

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

首先,你应该使用一个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); 
} 

您可以使用Regex,并用逗号

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

当string.Replace'和表达式很简单时,为什么要用'Regex.Replace'来打扰? – juharr 2013-02-14 14:13:34

这里是你怎么做,你的最后一个值之前有“和”替换空格。

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

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

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

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