2014-04-28 70 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);