2013-04-16 55 views
1

(限制:系统; ONLY)分割字符串,并删除空格没有。选择

我希望能够以一个字符串分割成一个数组,并删除空格,我有这个目前:

string[] split = converText.Split(',').Select(p => p.Trim()).ToArray(); 

编辑:也.ToArray不能被明显使用。

但问题是,我不能使用任何其他核心系统方法。那么我怎样才能修剪空间从一个分裂或数组没有使用.select或其他非核心的方式。

谢谢!

回答

7
string[] split = 
    convertText.Split(new[]{',',' '}, StringSplitOptions.RemoveEmptyEntries); 

通过为您的拆分条件添加一个空格,当您具有RemoveEmptyEntries时,它将摆脱它们。但是,如果其中有空格的条目将会失败。在这种情况下,你可以只: -

string[] split = 
     convertText.Split(new[]{','}, StringSplitOptions.RemoveEmptyEntries); 

for (int index = 0; index < split.Count; index++) 
{ 
    split[index] = split[index].Trim(); 
} 
+0

谢谢!这工作。 – Kennyist

+2

这种类型是基于我以前所知道的......如果你有一个字符串“mega ozs,blah”,这将会失败,因为它会分裂成mega和oucnes –

+0

有机会得到一个空字符串在结果数组中。正如@凯斯所说,*“如果有空格的条目,这将失败”*。 – Sergey

1

你可以做一个辅助方法,从每个字符串修剪空间

private IEnumerable<string> SplitAndTrim(char splitChar, string str) 
{ 
    if (!string.IsNullOrEmpty(str) && str.Contains(splitChar)) 
    { 
     foreach (var item in str.Split(splitChar)) 
     { 
      yield return item.Trim(); 
     } 
    } 
    yield return str; 
} 

用法:

string[] split = SplitAndTrim(',', converText).ToArray(); 
+0

这段代码根本不正确。在结果数组中有一个获得一个*空字符串*的机会,并且最初的* str *值也会被放弃。事实上,你会从* SplitAndTrim(',',“text,”)*得到错误的结果* {“text”,“”,“text,”* https://dotnetfiddle.net/zDAzAe – Sergey

0

应该对所有的情况下工作:

public static class TrimHelper 
{ 
    public static string[] SplitAndTrim(this string str, char splitChar, StringSplitOptions options = StringSplitOptions.RemoveEmptyEntries) 
    { 
     List<string> result = new List<string>(); 

     if (str != null) 
     { 
      foreach (var item in str.Split(splitChar, options)) 
      { 
       string val = item.Trim(); 

       if (options == StringSplitOptions.RemoveEmptyEntries && val == string.Empty) 
        continue; 

       result.Add(val); 
      } 
     } 

     return result.ToArray(); 
    } 
} 

用法:

string[] split = "text, ".SplitAndTrim(',').ToArray();