Split string and get first value only
我想知道是否有可能使用split来创建一个字符串,该字符串包含用逗号分隔的多个部分,例如:
1
| title, genre, director, actor |
我只想要第一部分,每个字符串的标题,而不是其余部分?
1 2
| string valueStr ="title, genre, director, actor";
var vals = valueStr.Split(',')[0]; |
vals会给你标题
-
那是一种显而易见的方式...但是,实际上,您想对整个字符串进行拆分,只是为了获得第一部分?想象一下,如果字符串有点长,并且在程序的生命周期中是否多次执行了该操作,甚至可能在所有记录的循环中都执行过。
-
当您要使用字符串拆分另一个字符串时,这是一种好方法。 var vals = valueStr.Spli(? MySp)t",0)[0];
实际上,有比拆分更好的方法:
1 2 3 4 5 6
| public string GetFirstFromSplit(string input, char delimiter)
{
var i = input.IndexOf(delimiter);
return i == -1 ? input : input.Substring(0, i);
} |
作为扩展方法:
1 2 3 4 5 6 7 8 9 10 11 12 13
| 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);
} |
用法:
1 2
| string result ="hi, hello, sup".FirstFromSplit(',');
Console.WriteLine(result); //"hi" |
- 它将返回字符串还是char []?
-
@ivowiblo好点。我修好了它。编辑:实际上删除了它,因为扩展方法变得越来越好。
-
您不是写了一种在评论中使用split的简单方法吗?
-
是的,但是将整个字符串拆分成第一部分实在是愚蠢的,所以我决定经过一番思考后将其删除。这只是str.Split(',')[0]。
-
但是我喜欢它,并且从一开始就自己进行了测试,但是没有[]。难道不是您的答案的替代方法吗?为什么这么笨?
-
它工作正常,但执行不必要的操作。就像您要计算直到1000的所有素数一样,只是为了获得第3个素数,除了示例稍差一些。
-
我对此感到满意,并打算接受您的回答,但是我想它应该作为您的回答的一部分来代替?
-
考虑将注释作为答案的一部分;)但是,我真的建议您使用其他方法,尤其是当您循环执行许多记录或类似操作时。
-
我在.FirstFromSplit(',');下面有一条红线。我想念什么吗?
-
1在第二个和第三个示例(FirstFromSplit)中有一个小错误,它只是一个错字,不会使此答案的正确性无效。请更正/更改输入/源
-
很好,但是我认为与split替代相比,代码太多了!
-
它是一次性编写的代码,用法更加简洁:myString.FirstFromSplit(',');,但我认为更重要的是效率。
-
是的。但是他没有要求最有效也不是可重复使用的方法。也许他只需要这个标题就可以使用,拆分替代方法会比编写所有替代方法更好。
-
我不明白如何将两行扩展方法(可以复制粘贴)称为"所有"。即使他只在代码中的某个位置执行此操作,也可以在那里实现方法的逻辑(再次-两行)。这只是做正确的事,而不仅仅是使事情行之有效。
-
source.IndexOf(delimiter,StringComparison.Ordinal)
您可以做到:
1 2 3
| var str ="Doctor Who,Fantasy,Steven Moffat,David Tennant";
var title = str.Split(',').First(); |
您也可以这样:
1 2
| var index = str.IndexOf(",");
var title = index < 0 ? str : str.Substring(0, index); |
-
如果字符串不包含",",第二个将失败-尽管拆分?祷卮笮∥?的数组,其中包含整个字符串。
-
再说一次,为什?lt;string.Empt<?编码人员将希望返回整个字符串,就像整个字符串将出现?lt;splitResult[0<中一?ㄒ彩墙?gt;code>FirstOrDefaul<()<>code>更改为简?lt;?gt;<0]>/code>的原因,因为数组将始终至少包含一个?兀?
-
您为什么坚持使用Linq?也?lt;>枰?code><i>st。人们常常认为Linq会使一切变得更好,这是错误的。在这种情况下,它甚至会更慢,因为返回类型是数组,因此索引非常快,而使用Linq可能会使用数组的枚举?ㄎ裁矗浚。?
-
是的,汇编程序比.NET快。我认为代码以" first"代替" [0]"更具可读性,并且认为Firs(ǎ┗ǚ训氖奔洳⒉欢唷N蘼廴绾危Ω蒙院蠼杏呕?odetocode.com/aimages/200807/premature_6.jpg
-
即使我发现照片令人不安地有趣,但这也不是"优化"。除此之外,大多数人<蓟>同意<<ode>[0]<<co>e>比First更具可读性,但是除了这是关于个人喜<?gt;酝猓?<od>>[0]<<c>de>比First快17倍-我再说一遍:快17倍。这就足以将可读性和个人喜好放在一边。尤其是因为这将被多次调用是非常合理的。
-
在这一点上的考虑是过早的优化。如果他不会每秒执行数千次该代码,那就没关系。
-
您可以称其为过早思考,但是即使那<>,使用<&l>;ode>[0]还是很正常的,我不知道为什么不这样做。这是非常专业的标准。
-
我真的不想陷入这个愚蠢的争论,而且我真的没有任何针对您的私事。我只是以为这很奇怪,所以决定指出这一点,然后迷住了!最后,两种方式都是可读有效的。 :)
-
我从未说过这不正常也不行。我只是告诉<悖褂?code&>t;First()并没有错,为什么我认为很好。
-
我从来没有说过错:P只是建议了为什&l>;次胰衔?>lt;ode>[0]更好。
-
"为什么您坚持使用Linq?也不需要First。人们常常认为Linq会使一切变得更好,这是错误的。"
-
使用Linq没错,认为可以使一切变得更好是错误的。
这是我设法建立的两个选项,既没有使用var类型的麻烦,也没有使用其他变量的行:
1 2 3 4 5
| string f ="aS.".Substring(0,"aS.".IndexOf("S"));
Console.WriteLine(f);
string s ="aS.".Split("S".ToCharArray(),StringSplitOptions.RemoveEmptyEntries)[0];
Console.WriteLine(s); |
它得到的是: