什么';这是合并字符串的最佳方法

本文关键字:字符串 最佳 方法 合并 什么 | 更新日期: 2023-09-27 17:59:23

假设我有一个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。我通常会把最后一个逗号分开,但这看起来很难看,也很超重。有什么轻量级的方法可以做到这一点吗?

除此之外:有没有简单的解决方案可以将"answers"添加到星座中,结果类似于:用户输出的a, b, c, d and e

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

什么';这是合并字符串的最佳方法

我会使用string.Join:

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

或者,您可以在循环主体的开始处添加分隔符,但在第一次循环时,不是

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

你还写道:

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

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

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

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

Eric Lippert';s挑战";逗号问答";,最佳答案?

string.Join可能是您的朋友:

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

以下是如何在最后一个值之前有"and"的地方执行此操作。

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