【问题标题】:What's the best way to merge strings?合并字符串的最佳方法是什么?
【发布时间】:2026-01-26 04:20:07
【问题描述】:

假设我有一个带有这样字符串的 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.:我知道我可以在示例中使用替换方法,但这不是我想要的,因为在大多数情况下你不能使用它(例如当你构建一个 sql 字符串时)。

【问题讨论】:

    标签: c# string coding-style


    【解决方案1】:

    我会使用string.Join:

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

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

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

    你还写道:

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

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

    【讨论】:

    • 什么是ORM?对象角色建模?
    • 我正在使用 LINQ。这是 ORM 吗?
    • @JanHommes:是的。 (或者更确切地说,LINQ 有几种不同的风格,但大多数与 db 相关的风格都算作 ORM。)如果您使用的是 LINQ,为什么还要自己创建 SQL 语句?
    • 对动态创建的网格进行全文搜索。它不是 SQL,而是带有动态 LINQ 的 SQL-Like。全文搜索有没有更好的解决方案?
    • @JanHommes:我们需要确切地了解您在做什么......但一般来说,您不需要在查询字符串中包含值。它充满了问题。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      string.Join可能是你的朋友:

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

      【讨论】:

        【解决方案4】:

        在最后一个值之前有“和”的情况下,您可以这样做。

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

        【讨论】:

          【解决方案5】:
          newStr = String.Join(",", str.split(' '));
          

          【讨论】:

            【解决方案6】:

            您可以使用Regex 并将空格替换为逗号

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

            【讨论】:

            • 既然有string.Replace,而且表达式如此简单,为什么还要麻烦Regex.Replace
            【解决方案7】:

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

            【讨论】:

              最近更新 更多