在使用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();