2012-11-30 107 views
5

我有一個關於拆分字符串的問題。我想拆分字符串,但是當在字符串中看到字符「」,那麼不要拆分並刪除空的空格。將字符串拆分爲數組,刪除空的空格

我的字符串:

String tmp = "abc 123 \"Edk k3\" String;"; 

結果:

1: abc 
2: 123 
3: Edkk3 // don't split after "" and remove empty spaces 
4: String 

我對結果代碼,但我不知道如何刪除空白空間在 「」

var tmpList = tmp.Split(new[] { '"' }).SelectMany((s, i) => 
       { 
        if (i % 2 == 1) return new[] { s }; 
        return s.Split(new[] { ' ', ';' }, StringSplitOptions.RemoveEmptyEntries); 
       }).ToList(); 

或者但這並沒有看到「」,所以它分裂了一切

string[] tmpList = tmp.Split(new Char[] { ' ', ';', '\"', ',' }, StringSplitOptions.RemoveEmptyEntries); 

回答

8

添加.Replace(」」,‘’)

String tmp = @"abc 123 ""Edk k3"" String;"; 
var tmpList = tmp.Split(new[] { '"' }).SelectMany((s, i) => 
{ 
    if (i % 2 == 1) return new[] { s.Replace(" ", "") }; 
    return s.Split(new[] { ' ', ';' }, StringSplitOptions.RemoveEmptyEntries); 
}).ToList(); 
0

string.Split不適合你想要做什麼,你不能告訴它忽略什麼是在"

我也不會用Regex,因爲這會變得複雜和內存密集(對於長字符串)。

實現您自己的解析器 - 使用狀態機來跟蹤您是否位於引用部分內。

0

您可以使用正則表達式。不要拆分,而是指定要保留的內容。

實施例:

string tmp = "abc 123 \"Edk k3\" String;"; 

MatchCollection m = Regex.Matches(tmp, @"""(.*?)""|([^ ]+)"); 

foreach (Match s in m) { 
    Console.WriteLine(s.Groups[1].Value.Replace(" ", "") + s.Groups[2].Value); 
} 

輸出:

abc 
123 
Edkk3 
String;