繁体   English   中英

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

[英]What's the best way to merge strings?

假设我有一个带有这样字符串的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字符串时)。

我会用string.Join

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

或者,您可以在循环体的开头添加分隔符,但不能在第一轮添加分隔符。

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

你还写道:

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

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

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

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

Eric Lippert挑战“逗号 - 狡辩”,最佳答案?

string.Join可能是你的朋友:

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

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

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

您可以使用正则Regex并用逗号替换空格

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM