【问题标题】:Split string and get first value only拆分字符串并仅获取第一个值
【发布时间】:2022-05-23 15:19:59
【问题描述】:

我想知道是否可以使用 split 来划分一个字符串,其中几个部分用逗号分隔,如下所示:

title, genre, director, actor

我只想要第一部分,每个字符串的标题而不是其余部分?

【问题讨论】:

    标签: c# split


    【解决方案1】:
    string valueStr = "title, genre, director, actor";
    var vals = valueStr.Split(',')[0];
    

    vals 会给你标题

    【讨论】:

    • 这有点明显......但实际上,你想对整个字符串执行拆分,只是为了得到第一部分?想象一下,如果字符串有点长,并且在程序的生命周期中执行了多次操作,甚至可能在所有记录的循环中执行。
    • 当你想用一个字符串分割另一个字符串时,这是一个好方法。 var vals=valueStr.Split("MySplit",0)[0];
    【解决方案2】:

    其实还有比拆分更好的办法:

    public string GetFirstFromSplit(string input, char delimiter)
    {
        var i = input.IndexOf(delimiter);
    
        return i == -1 ? input : input.Substring(0, i);
    }
    

    作为扩展方法:

    public static string FirstFromSplit(this string source, char delimiter)
    {
        var i = source.IndexOf(delimiter);
    
        return i == -1 ? source : source.Substring(0, i);
    }
    
    public static string FirstFromSplit(this string source, string delimiter)
    {
        var i = source.IndexOf(delimiter);
    
        return i == -1 ? source : source.Substring(0, i);
    }
    

    用法:

    string result = "hi, hello, sup".FirstFromSplit(',');
    Console.WriteLine(result); // "hi"
    

    【讨论】:

    • 它将返回一个字符串或一个 char[] ?
    • @ivowiblo 好点。我修好了它。编辑:实际上删除了它,因为扩展方法更好更好。
    • 不错,但我认为与拆分替代方案相比,它的代码太多了!
    • 一次性编写代码,使用更简洁:myString.FirstFromSplit(',');,但我认为更重要的是效率。
    • 我不明白如何将两行扩展方法(可以复制粘贴)称为“所有这些”,真的。即使他只在他的代码中的一个地方这样做,他也可以在那里实现方法的逻辑(再次 - 两行)。这只是做正确的事情,而不是只是让事情顺利进行。
    【解决方案3】:

    你可以做到的:

    var str = "Doctor Who,Fantasy,Steven Moffat,David Tennant";
    
    var title = str.Split(',').First();
    

    你也可以这样做:

    var index = str.IndexOf(",");
    var title = index < 0 ? str : str.Substring(0, index);
    

    【讨论】:

    • 你为什么坚持使用Linq?也不需要First。人们常常认为 Linq 会让一切变得更好,这是错误的。在这种情况下它甚至会更慢,因为返回类型是一个数组,所以索引非常快,而使用 Linq 可能会使用数组的枚举器(为什么?!)
    • 是的,而且汇编程序比 .NET 更快。我认为将“first”而不是“[0]”放在代码中更具可读性,并且不认为 First() 花费的时间会很长。无论如何,您应该稍后进行优化。 odetocode.com/aimages/200807/premature_6.jpg
    • 考虑到这一点是过早的优化。如果他不会每秒执行数千次该代码,那也没关系。
    • “你为什么要坚持使用 Linq?First 也不需要。人们常常认为 Linq 会让一切变得更好,这是错误的。”
    • 使用 Linq 并没有错,认为它会让一切变得更好是错误的。
    【解决方案4】:

    这是我设法构建的两个选项,没有使用 var 类型的奢侈,也没有额外的变量:

    string f = "aS.".Substring(0, "aS.".IndexOf("S"));
    Console.WriteLine(f);
    
    string s = "aS.".Split("S".ToCharArray(),StringSplitOptions.RemoveEmptyEntries)[0];
    Console.WriteLine(s);
    

    这是它得到的:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      相关资源
      最近更新 更多