使用分隔符连接字符串并考虑空字符串

时间:2013-06-19 02:44:18

标签: c# string join

我有一个具有一些属性的对象

例如。

Employee
-Name
-Company

我想为他们的名字和公司获取一个格式化的字符串,用“ - ”分隔。

现在我可以做string.Join("-", e.Company, e.Name)但如果公司为空或空,我会得到“ - fred”。

是否有更好的内置方式来考虑这些空白/空字符串。我以前使用一些简短的ifs来包含 - 在string.format中,但它看起来很乱。

即。

string.Format("{0}{1}{2}", e.Company, !string.IsNullOrWhiteSpace(e.Company) ? "-": string.Empty, e.Name);

4 个答案:

答案 0 :(得分:3)

您可以尝试使用Join方法中的内联三元组:

string.Join("-", string.IsNullOrEmpty(e.Company) ? "fired" : e.Company, e.Name)

编辑(我误读了#f; fred'拼写错误)。
如另一个答案所述,扩展方法会清理代码。您将把丑陋的代码移动到不同的地方。

作为扩展方法的替代方案,我建议使用以下内容,以便以后允许更多参数:

  public static string ExcludeEmptiesJoin(params string[] args) {
     string outValue = string.Empty;

     foreach (var arg in args.Where(s => !string.IsNullOrEmpty(s))) {
        if (string.IsNullOrEmpty(outValue)) {
           outValue = arg;
        } else {
           outValue = string.Join("-", outValue, arg);
        }
     }

     return outValue;
  }

用法:

 Console.WriteLine(ExcludeEmptiesJoin("Company", "Fred"));
 Console.WriteLine();
 Console.WriteLine(ExcludeEmptiesJoin("", "Fred"));
 Console.WriteLine();
 Console.WriteLine(ExcludeEmptiesJoin("Company", ""));
 Console.WriteLine();
 Console.WriteLine(ExcludeEmptiesJoin("Company", "", "4/4/1979"));
 Console.WriteLine();
 Console.WriteLine(ExcludeEmptiesJoin("Company", "Fred", "4/4/1979"));

输出:

  

公司-佛瑞德

     

佛瑞德

     

公司

     

公司-4 /1979分之4

     

公司-佛瑞德-4 /1979分之4

答案 1 :(得分:0)

我怀疑你要比现有的更加简化,但是如果经常使用这种模式,你可以将分隔符处理移动到扩展方法以“清理”一点; < / p>

static class StringExtensions
{
    public static string RemoveLeadingOrTrailingToken(this string value, string token)
    {
        if (value.StartsWith(token))
            return value.Substring(token.Length);
        if (value.EndsWith(token))
            return value.Substring(0, value.IndexOf(token, StringComparison.Ordinal));

        return value;
    }
}

class Program
{
    static void Main(string[] args)
    {
        string s1 = "company";
        string s2 = "product";
        string result = String.Format("{0}-{1}", s1, s2).RemoveLeadingOrTrailingToken("-");
    }    
}

答案 2 :(得分:0)

采用内联三元可能更清晰:

= string.IsNullOrWhiteSpace(e.Company) ? e.Name : string.Join("-", e.Company, e.Name);

答案 3 :(得分:0)

如果你有两个以上的属性,比如一个地址,这就解决了你的问题:

List<string> attributes = new List<string>(new string[] {
    e.Company, 
    e.Name, 
    e.Address});
attributes.RemoveAll(s => s == String.Empty);
String.Join("-", attributes.ToArray());