2014-04-28 27 views
0

參考編號計數過載在Splitting a filename在Silverlight應用程序將字符串分割方法

在Silverlight應用程序的問題,因爲沒有Count過載,我需要的預期結果作爲四個弦元素。

NewReport 
20140423_17255375 
BSIQ 
2wd28830-841c-4d30-95fd-a57a7aege412.zip 

這行代碼是讓我的Silverlight應用程序生成錯誤

var strFileTokens = filename.Split(new[] { '-' }, 4, StringSplitOptions.None); 

生成錯誤: 錯誤4

The best overloaded method match for 'string.Split(string[], int, System.StringSplitOptions)' has some invalid arguments C:\TestSolution\Reporting.cs 287 

如何獲得上述四個字符串元素?

回答

1

正如您所提到的那樣,Silverlight中不支持重載子字符串的最大數量的重載。 Here是silverlight概述。

所以你需要使用一個解決辦法,如果你只想4.採取可以使用Split + Enumerable.Take

string[] strFileTokens = filename 
    .Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries) 
    .Take(4) 
    .ToArray(); 

我會用StringSplitOptions.RemoveEmptyEntries省略空令牌。如果你不需要它作爲數組,你可以省略ToArray並且可以更加高效地執行它。

更新:現在我已經從你的另一個問題認識到,你想採取前三個元素和最後一個。因此,如果這是你的文件名:

string filename = "NewReport-20140423_17255375-BSIQ-2wd28830-841c-4d30-95fd-a57a7aege412.zip"; 

你要這個string[]:

"NewReport" 
"20140423_17255375" 
"BSIQ" 
"2wd28830-841c-4d30-95fd-a57a7aege412.zip" 

你可以使用LINQ的SkipTake + string.Join獲得最後的令牌一個字符串:

string[] allTokens = filename.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries); 
var firstThreeToken = allTokens.Take(3); 
var lastTokens = allTokens.Skip(3); 
string lastToken = string.Join("-", lastTokens); 
string[] allToken = firstThreeToken.Concat(new[] { lastToken }).ToArray(); 
+0

第四元素只是返回'2wd28830'但它不給出預期'2wd28830-841c-4d30-95fd-a57a7aege412.zip' – venkat

+0

@sukumar:什麼是完整的路徑這個文件?你用什麼來提取文件名?你應該使用'FileInfo'或'Path'類。如果它是文件名中的第一個,爲什麼將'2wd28830'作爲第四個(最後一個)元素? –

+0

完整的文件名是'NewReport-20140423_17255375-BSIQ-2wd28830-841c-4d30-95fd-a57a7aege412.zip'這是我從WCF服務調用中得到的'string'中的響應。 – venkat

0

您可以使用Regex.Split方法,該方法提供了一個採用count參數的超載。

enter image description here

Regex reg = new Regex("-"); 
string filename = "NewReport-20140423_17255375-BSIQ-2wd28830-841c-4d30-95fd-a57a7aege412.zip"; 
var parts = reg.Split(filename, 4);