检查字符串是否不以List <string>中的任何字母开头

时间:2018-09-27 04:35:42

标签: c# .net string list startswith

如果我输入了一个字符串,可以检查第一个字母是否确实是从字符串列表中输入的:

var dir = "FOLDERNAME";
var list = new List<string>() { "a", "b", "c", "d", "e", "f", "g", "s", 
                                "t", "u", "v", "w", "z", "y", "z", 
                                "1", "2", "3", "4", "5", "6", "7", "8", "9"};
if (!dir.ToLower().!StartsWith :MagicLinq: list) { Do Stuff; }

还是我必须走正则表达式路线?

4 个答案:

答案 0 :(得分:2)

您可以检查第一个字母是否在列表中:

if (list.Contains(""+dir[0])){}

答案 1 :(得分:2)

一种考虑的方法:

var lower = new string(dir?.FirstOrDefault() ?? new char(), 1);
if (list.Contains(lower) {

第一行从字符串中获取第一个字符,并处理空字符串和null字符串(通过获取空字符),然后将char加载到string中。 / p>

您可以简化一下,如果List<string>List<charHashSet<char>。然后,您可以删除new string部分。

答案 2 :(得分:1)

如果使用HashSet<>进行多次检查会比linear search上的List<>有更好的性能。即使性能不是问题,HashSet<>也可能更好地表示数据及其使用方式,因为每个元素都是唯一的,并且排序无所谓。

这里我使用的是HashSet<>中的char ...

var dir = "FOLDERNAME";
var restrictedChars = new HashSet<char>(
    new[] {
        'A', 'B', 'C', 'D', 'E', 'F', 'G',
        'S', 'T', 'U', 'V', 'W', 'Z', 'Y', 'Z',
        '1', '2', '3', '4', '5', '6', '7', '8', '9'
    }
);

if (!restrictedChars.Contains(dir[0]))
{
    // Do stuff...
}

请注意,由于不区分大小写的比较,char.ToUpper() / char.ToUpperInvariant()recommended way to normalize case,因此我将限制字符从小写改为大写。然后,您可以像这样不区分大小写的方式执行检查...

if (!restrictedChars.Contains(char.ToUpperInvariant(dir[0])))
{
    // Do stuff...
}

或者,您可以使用HashSet<>string中的一个,并传入不区分大小写的StringComparer实例...

var dir = "FOLDERNAME";
var restrictedChars = new HashSet<string>(
    new[] {
        "a", "b", "c", "d", "e", "f", "g",
        "s", "t", "u", "v", "w", "z", "y", "z",
        "1", "2", "3", "4", "5", "6", "7", "8", "9"
    },
    StringComparer.OrdinalIgnoreCase
);

// Get a string from Substring() instead of dir[0].ToString()
if (!restrictedChars.Contains(dir.Substring(0, 1)))
{
    // Do stuff...
}

通过这种方法,将受限制的字符string馈入HashSet<>的情况无关紧要。

答案 3 :(得分:0)

这就是我要做的

String dir = "FOLDERNAME";
var MyList = new List<string>() { "a", "b", "c", "d", "e", "f", "g", "s",
                "t", "u", "v", "w", "z", "y", "z",
                "1", "2", "3", "4", "5", "6", "7", "8", "9"};
Console.WriteLine((MyList.IndexOf(dir.Substring(0, 1).ToLower()) != -1) ? "True" : "False");
Console.ReadLine();