如何在c#中轻松删除字符串数组中的部分字符串

时间:2012-09-05 18:23:55

标签: c#

我正在使用以下代码:

var names = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name"));

我得到的密钥如:name1,name2,name16,name18。

现在我想创建另一个数组,它将删除名称并保留1,2,16,18。在上面的代码本身有没有简单的方法呢?还是分开做?

5 个答案:

答案 0 :(得分:6)

你可以直接

ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name")).Select(a => a.Replace("name",""));

答案 1 :(得分:2)

我认为你的代码足够好了。通过使用子字符串可以提高性能,因为它可以直接删除前缀:

var prefix = "name"; // could be a parameter or used as const; just for example
var nums = ConfigurationManager.AppSettings.AllKeys.Where(s => s.StartsWith(prefix)).Select(s => s.Substring(prefix.Length)).ToArray();

答案 2 :(得分:1)

试试这个:

var names = ConfigurationManager.AppSettings.AllKeys.Where(k => k.StartsWith("name")).Select(p => p.Replace("name", ""));

答案 3 :(得分:0)

使用:

var namesWithoutPrefix = names.Select(n => n.Substring(4));

执行Replace代替Substring可能会在一个名称中替换多个子字符串(即使它没有这样做也会更慢)。

答案 4 :(得分:0)

我不建议依赖数值的位置或字符串的长度,或者文本根本就是“名字”的事实。相反,您可以使用简单的正则表达式来一致地提取它:

Regex regex = new Regex(@"[0-9]+");
var numbers = ConfigurationManager.AppSettings
    .AllKeys.Select(p => regex.Match(p).Value).ToArray();