在使用Split()时执行Trim()

今天我想知道是否有更好的解决scheme执行下面的代码示例。

string keyword = " abc, foo , bar"; string match = "foo"; string[] split= keyword.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries); foreach(string s in split) { if(s.Trim() == match){// asjdklasd; break;} } 

有没有办法执行trim()而不需要手动迭代每个项目? 我正在寻找像'分割下面的字符,并自动修剪每个结果'。

啊,立即发布我发现

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

在我怎样才能拆分和修整一个string成部分都在一行?

不过我很好奇:可能有更好的解决scheme呢? (或者编译器可能将它们转换成与Linq-Operation相同的代码输出?)

另一个可能的select(避免LINQ,好或坏):

 string line = " abc, foo , bar"; string[] parts= Array.ConvertAll(line.Split(','), p => p.Trim()); 

但是,如果你只是需要知道它是否存在 – 也许是短路?

 bool contains = line.Split(',').Any(p => p.Trim() == match); 

我build议在原始string上使用正则expression式,查找“任意数量的空格,后跟一个分隔符,后跟一个或多个空格”的模式,然后删除这些空格。 然后分裂。

尝试这个:

 string keyword = " abc, foo , bar"; string match = "foo"; string[] split = Regex.Split(keyword.Trim(), @"\s*[,;]\s*"); if (split.Contains(match)) { // do stuff } 

如果空格只是围绕逗号分隔的string中的单词,这将工作:

 var keyword = " abc, foo , bar"; var array = keyword.Replace(" ", "").Split(','); if (array.Contains("foo")) { Debug.Print("Match"); } 

你会发现很多不同的方法来做这个,性能的改变和准确性是不会很明显的。 我build议将它们全部插入像NUnit这样的testing套件,以便找出哪一个出现在顶部,哪些是准确的。

使用循环中的小,中,大量文本来检查各种情况。

 var parts = line.Split(';').Select(p => p.Trim()).Where(p => !string.IsNullOrWhiteSpace(p)).ToArray();