拆分字符串并仅获取第一个值

3D-*_*tiv 22 c#

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

title, genre, director, actor
Run Code Online (Sandbox Code Playgroud)

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

bhu*_*tel 58

string valueStr = "title, genre, director, actor";
var vals = valueStr.Split(',')[0];
Run Code Online (Sandbox Code Playgroud)

vals将为您提供标题

  • 这有点显而易见......但实际上,你想要对整个字符串执行拆分,只是为了得到第一部分?想象一下,如果字符串有点长,并且如果在程序的生命周期中多次执行操作,甚至可能在所有记录的循环中执行. (4认同)

Sim*_*Var 21

实际上,有一种比分裂更好的方法:

public string GetFirstFromSplit(string input, char delimiter)
{
    var i = input.IndexOf(delimiter);

    return i == -1 ? input : input.Substring(0, i);
}
Run Code Online (Sandbox Code Playgroud)

并作为扩展方法:

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);
}
Run Code Online (Sandbox Code Playgroud)

用法:

string result = "hi, hello, sup".FirstFromSplit(',');
Console.WriteLine(result); // "hi"
Run Code Online (Sandbox Code Playgroud)

  • 它是一次性编写代码,用法更简洁:`myString.FirstFromSplit(',');`,但更重要的是效率,在我看来. (2认同)

Ivo*_*Ivo 7

你能行的:

var str = "Doctor Who,Fantasy,Steven Moffat,David Tennant";

var title = str.Split(',').First();
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

var index = str.IndexOf(",");
var title = index < 0 ? str : str.Substring(0, index);
Run Code Online (Sandbox Code Playgroud)

  • 你为什么坚持使用Linq?也不需要“第一”。人们常常认为 Linq 会让一切变得更好,这是错误的。在这种情况下它甚至会更慢,因为返回类型是一个数组所以索引非常快,而使用 Linq 可能会使用数组的枚举器(为什么?!) (2认同)
  • 在这一点上的考虑是过早的优化。如果他不会每秒执行数千次该代码,那就没关系。 (2认同)