gpt4 book ai didi

c# - 拆分文件名

转载 作者:太空狗 更新时间:2023-10-29 22:13:48 27 4
gpt4 key购买 nike

我有一个文件名:

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

如何将上述文件名拆分为 4 个字符串组。

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

我试过:

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

但我没有得到上面要求的四个字符串

最佳答案

您可以指定要返回的最大子字符串数:

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

这将避免将 2wd28830-841c-4d30-95fd-a57a7aege412.zip 分成额外的“片段”。

(此外,您可以删除 StringSplitOptions.None 因为这是默认设置。)


在内部,它在一个循环内创建一个子字符串数组,并且它只循环您指定的次数(或字符串中可用的最大分隔符数,以较少者为准)。

for (int i = 0; i < numActualReplaces && currIndex < Length; i++)
{
splitStrings[arrIndex++] = Substring(currIndex, sepList[i] - currIndex );
currIndex = sepList[i] + ((lengthList == null) ? 1 : lengthList[i]);
}

变量 numActualReplaces 是您指定的计数或字符串中存在的实际分隔符数量中的最小值。 (这样,如果您指定一个更大的数字,如 30,但字符串中只有 7 个连字符,则不会出现异常。实际上,当您根本不指定数字时,它实际上是在使用 Int32.MaxValue 你甚至都没有意识到。)


您更新了您的问题,说您正在使用 Silverlight,它没有使用 Count 进行重载。这真的很烦人,因为在底层 string 类仍然支持它。他们只是没有提供一种方法来传递您自己的值(value)。它使用硬编码的 int.MaxValue

您可以创建自己的方法来恢复所需的功能。我尚未针对所有边缘情况测试此扩展方法,但它确实适用于您的字符串。

public static class StringSplitExtension
{
public static string[] SplitByCount(this string input, char[] separator, int count)
{
if (count < 0)
throw new ArgumentOutOfRangeException("count");

if (count == 0)
return new string[0];

var numberOfSeparators = input.Count(separator.Contains);

var numActualReplaces = Math.Min(count, numberOfSeparators + 1);

var splitString = new string[numActualReplaces];

var index = -1;
for (var i = 1; i <= numActualReplaces; i++)
{
var nextIndex = input.IndexOfAny(separator, index + 1);
if (nextIndex == -1 || i == numActualReplaces)
splitString[i - 1] = input.Substring(index + 1);
else
splitString[i - 1] = input.Substring(index + 1, nextIndex - index - 1);
index = nextIndex;
}

return splitString;
}
}

确保它在您的 UserControl 可以访问的某个地方,然后像这样调用它:

var strFileTokens = filename.SplitByCount(new[] { '-' }, 4)

关于c# - 拆分文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23295134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com