Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Split()时执行Trim()_C#_String_Trim - Fatal编程技术网

C# 使用Split()时执行Trim()

C# 使用Split()时执行Trim(),c#,string,trim,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

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

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();
List parts=line.Split(“;”).Select(p=>p.Trim()).ToList();

我仍然很好奇:有没有更好的解决办法?(或者编译器可能会将它们转换为与Linq操作相同的代码输出吗?

另一个可能的选项(无论好坏,它都会避免Linq):

然而,如果你只需要知道它是否存在——也许是短路

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

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

您将发现许多不同的方法来执行此操作,性能变化和准确性不会很明显。我建议将它们全部插入NUnit这样的测试套件中,以便找出哪一个是最好的,哪一个是准确的

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

尝试以下方法:

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

如果空格仅包围逗号分隔字符串中的单词,则可以:

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

我知道这已经晚了10年,但你也可以用“”来分开:

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

因为您也在按空格字符进行拆分,并指示拆分删除空条目,所以您将得到所需的内容。

定义“更好”。。。你是说更具可读性?更快?更快/更高性能,同时不丧失可读性。就像Marc Gravell的anwser是的你说的绝对正确。似乎我必须习惯Any()方法;)谢谢也许你的回答更优雅?@Morty是的,也许。但您会发现业务规则远比实现细节重要。此外,这两种解决方案都有效,所以我们有很多选择。Array.ConvertAll()在.NET Compact Framework.Regex中不可用,也没有想到这一点,但您是对的,这将是另一种可能的解决方案。thanksI非常反对使用正则表达式来解决这样一个琐碎的问题。请参阅关于“现在您有两个问题”。我无法编写正则表达式,而且会把它搞砸,所以我也不会使用它,但这似乎是一种搜索和替换的非常简单的模式,我认为它比任何使用.Trim()的方法都要快在拆分后的每个元素上。如果单个值包含1个或多个空格,则此解决方案不起作用。对于OP,您可能已经晚了10年,但这正是我所需要的。不过,这假设单个条目中没有空格,否则这些条目将拆分为单独的单词。
var parts = line
    .Split(';')
    .Select(p => p.Trim())
    .Where(p => !string.IsNullOrWhiteSpace(p))
    .ToArray();
string[] split= keyword.Split(new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);