使用Split()时执行修剪()

时间:2009-12-29 22:30:24

标签: c# string trim

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

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();
How can I split and trim a string into parts all on one line?

中的

我仍然很好奇:可能有更好的解决方案吗? (或者编译器是否可能将它们转换为与Linq-Operation相同的代码输出?)

7 个答案:

答案 0 :(得分:76)

另一种可能的选择(避免使用LINQ,无论好坏):

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

但是,如果你只是需要知道它是否存在 - 可能是短路?

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

答案 1 :(得分:4)

如果空格只围绕逗号分隔字符串中的单词,则可以使用:

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

答案 2 :(得分:3)

我建议在原始字符串上使用正则表达式,查找模式“任意数量的空格后跟一个分隔符后跟一个或多个空格”并删除这些空格。然后拆分。

答案 3 :(得分:3)

试试这个:

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

答案 4 :(得分:3)

我知道这已经晚了10年,但您也可以将''分开:

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

因为您还要按空格字符进行拆分,并指示拆分以删除空条目,所以您将拥有所需的内容。

答案 5 :(得分:2)

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

答案 6 :(得分:1)

你会发现很多不同的方法,性能变化和准确性不会很明显。我建议将它们全部插入到像NUnit这样的测试套件中,以便找到哪一个在顶部,哪些是准确的。

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