2011-12-20 16 views
0

我不知道如何去做這件事。我有一個動態的逗號分隔的字符串:C#高級字符串操作或LINQ - 如何

A - B, Hello, C - D, World 

我需要的是字符串,刪除/過濾掉有一個項目的所有實例「 - 」在裏面。因此,期望的結果將是一個新的字符串,它是這樣的:

Hello, World 

現在,如果這不能使用字符串操作來完成,該字符串來自於

IEnumerable<string> 

使用LINQ。所以也許有一種方法可以通過使用LINQ來獲得我想要的結果。

下面是代碼:

var apps = lbAppGroup.Items.Cast<ListItem>().Where(i => i.Selected).Select(i => i.Value); 
string selectedAppValues = String.Join(", ", apps.ToArray()); 

這將返回我的最初的例子。

我正在使用C#3.5。任何方向或例子將不勝感激!

+1

爲什麼不將Where子句更改爲'.Where(i => i.Selected &&!i。 Value.Contains( 「 - 」))'。只要'i.Value'是一個字符串,它應該可以正常工作。 – Chad 2011-12-20 18:52:31

回答

2

與LINQ只要做到這一點像你已經做:

var apps = lbAppGroup.Items.Cast<ListItem>().Where(i => i.Selected && !i.Value.Contains("-")).Select(i => i.Value); 
string selectedAppValues = String.Join(", ", apps.ToArray());

此外,您可以使用正則表達式是這樣的:

Regex re = new Regex("(?<=[,^]\s*)[^-]+(?=[,$])"); 

但你只會做,如果你只有字符串。

+1

+1正如我在評論中所說的那樣。 – Chad 2011-12-20 18:57:43

+0

非常感謝您的幫助! – Jared 2011-12-20 19:08:26

0

這將返回序列中的所有字符串不包含破折號:

apps.Where(s => !s.Contains("-")); 

您可以鏈接您的LINQ語句,以便您可以將其添加到選擇這樣的:

var apps = lbAppGroup.Items.Cast<ListItem>().Where(i => i.Selected).Where(s => !s.Contains("-")).Select(i => i.Value); 

或在接下來的語句中使用它:

string selectedAppValues = String.Join(", ", apps.Where(s => !s.Contains("-")).ToArray()); 
0

就個人而言,我有一個擴展方法

// takes any IEnumerable, not just strings (like an int array for example) 
public static string Join(this IEnumerable source, string delimiter = ", ") 
{ 
    return string.Join(
      delimiter, 
      source.OfType<object>() 
      .Select(i => i == null ? "null" : i.ToString()).ToArray() 
      ) 
} 

如果你真的想要去LINQ一路

lbAppGroup.Items.Cast<ListItem>().Where(i => i.Selected) 
.Where(i => i.Value.Contains("-")) 
.Select(i => i.Value).Aggregate((x, y) => x + ", " + y); 

對於真正的大集合,這將不執行,以及的string.join雖然。

0

我不能在LINQ particullary中發表評論,但我可以告訴你我該如何處理這個字符串。

「A - B,你好,C - d,世界」

如果每個字符串以逗號分隔,然後每個字符串是一個字符串列表中的項目。

第一步是解析出每個項目。將每個字符從頭開始添加到單獨的字符串中。一旦你打一個逗號,把這個字符串添加到一個字符串數組中,清除字符串,並移動到下一個字符(或空格後面的下一個字符)。像這樣:

Begin -> "" 
[0] = A -> "A" 
[1] = -> "A " 
[2] = - -> "A -" 
... 
[5] = , -> "A - B" 
list<string>.add("A - B") 

一旦你有一個字符串列表,你再遍歷列表,並說

if (list.get(x).contains("-") list.remove(x) 

或什麼的。

現在,這是所有設置,你可以砍掉整個列表的東西,只是做了上飛: 1.確定的「當前」項目 2.如果是 - 在裏面,不加它到最後一個字符串 3.否則,用逗號加上 4.移動到下一個項目並重復,直到完成

+0

我不會寫循環或任何分開的字符串。與編寫正則表達式和字符串庫函數的人相比,你不可能在這方面做得更好。 – jwg 2013-01-22 17:04:53