如何在一行中将字符串拆分并修剪成部分?

问题描述:

我想这条线拆分:如何在一行中将字符串拆分并修剪成部分?

string line = "First Name ; string ; firstName"; 

到他们的修剪版本的数组:

"First Name" 
"string" 
"firstName" 

我怎样才能做到这一切在同一行?下面给我一个错误“无法转换为void类型”:

List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim()); 
+0

我认为问题标题应该是'我怎样'而不是'我为什么'? – rahul 2009-11-13 10:10:21

+1

由于'ForEach'在当前IEnumerable实例上工作并返回'void',所以返回错误。 – Majkel 2009-11-13 10:13:05

尝试

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList(); 

仅供参考,在Foreach方法需要一个动作(取T和返回void)的参数,和你的拉姆达返回一个字符串作为string.Trim返回一个字符串

Foreach扩展方法是为了修改集合中对象的状态。由于字符串是不可变的,这会没有效果

希望它能帮助; O)

塞德里克

+3

注意:'ForEach'不是扩展方法。 – Guffa 2012-03-15 23:52:27

+0

Linq的最佳解决方案! – Sonhja 2016-04-22 13:55:12

ForEach方法不返回任何东西,所以你不能分配给一个变量。

使用Select扩展方法代替:

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList(); 

因为p.Trim()返回一个新字符串。

您需要使用:

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList(); 

或者试试这个:

string[] parts = Regex.Split(line, "\\s*;\\s*"); 
+0

这是一个好主意,但是,我相信错过了字符串末尾的任何尾随空白,对吗? – jrichview 2017-06-01 18:13:06

下面是一个扩展方法...

public static string[] SplitAndTrim(this string text, char separator) 
    { 
     if (string.IsNullOrWhiteSpace(text)) 
     { 
      return null; 
     } 

     return text.Split(separator).Select(t => t.Trim()).ToArray(); 
    } 

尝试使用正则表达式:

List<string> parts = System.Text.RegularExpressions.Regex.Split(line, @"\s*;\s*").ToList(); 

使用正则表达式

string a="bob, jon,man; francis;luke; lee bob"; 
 
\t \t \t String pattern = @"[,;\s]"; 
 
      String[] elements = Regex.Split(a, pattern).Where(item=>!String.IsNullOrEmpty(item)).Select(item=>item.Trim()).ToArray();; \t \t \t 
 
      foreach (string item in elements){ 
 
       Console.WriteLine(item.Trim());

结果:

鲍勃

乔恩

弗朗西斯

卢克

摆锤

解释图案[,; \ S]:匹配任一之一发生, ;或空格字符