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

cit*_*nas 52 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;}
}
Run Code Online (Sandbox Code Playgroud)

有没有办法执行trim()而无需手动迭代每个项目?我正在寻找类似'由以下字符拆分并自动修剪每个结果'的东西.

啊,我发现之前立即发布了

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();
Run Code Online (Sandbox Code Playgroud)

一条线上如何将字符串拆分为多个部分?

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

Mar*_*ell 81

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

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

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

bool contains = line.Split(',').Any(p => p.Trim() == match);
Run Code Online (Sandbox Code Playgroud)

  • http://stackoverflow.com/questions/1728303/how-can-i-split-and-trim-a-string-into-parts-all-on-one-line中的答案可能更优雅吗? (3认同)

Dar*_*kas 9

var parts = line
    .Split(';')
    .Select(p => p.Trim())
    .Where(p => !string.IsNullOrWhiteSpace(p))
    .ToArray();
Run Code Online (Sandbox Code Playgroud)


Jen*_*und 6

如果空格仅包围逗号分隔字符串中的单词,则这将起作用:

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

  • 如果单个值包含 1 个或多个空格,则此解决方案不起作用。 (5认同)

小智 5

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

string[] split= keyword.Split(new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);
Run Code Online (Sandbox Code Playgroud)

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

  • 这假设各个条目中没有空格,否则这些条目将被分成单独的单词。 (5认同)