检查字符串是否不以 List<string> 中的任何字母开头
Check that string does not start with any letters from List<string>
如果我输入了一个字符串,是否可以检查第一个字母是否以字符串列表中的输入开头:
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; }
还是我必须走正则表达式路线?
您可以检查第一个字母是否在列表中:
if (list.Contains(""+dir[0])){}
要考虑的一种方法:
var lower = new string(dir?.FirstOrDefault() ?? new char(), 1);
if (list.Contains(lower) {
第一行从字符串中获取第一个字符,并处理空字符串和 null
字符串(通过获取空字符),然后将 char
加载到 string
.
如果 List<string>
是 List<char
或 HashSet<char>
,您可以简化它。然后你可以删除 new string
部分。
我就是这样做的
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();
如果此检查将使用 HashSet<>
would be more performant than a linear search on a List<>
进行多次。即使性能不是问题,HashSet<>
也可能更好地表示数据及其使用方式,因为每个元素都是唯一的并且排序无关紧要。
这里我使用了 char
的 HashSet<>
...
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()
are the recommended way to normalize case 以来,我将受限字符从小写更改为大写,以进行不区分大小写的比较。然后您可以像这样以不区分大小写的方式执行检查...
if (!restrictedChars.Contains(char.ToUpperInvariant(dir[0])))
{
// Do stuff...
}
或者,您可以使用 string
的 HashSet<>
并传入不区分大小写的 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...
}
使用这种方法,输入 HashSet<>
的受限字符 string
的大小写无关紧要。
如果我输入了一个字符串,是否可以检查第一个字母是否以字符串列表中的输入开头:
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; }
还是我必须走正则表达式路线?
您可以检查第一个字母是否在列表中:
if (list.Contains(""+dir[0])){}
要考虑的一种方法:
var lower = new string(dir?.FirstOrDefault() ?? new char(), 1);
if (list.Contains(lower) {
第一行从字符串中获取第一个字符,并处理空字符串和 null
字符串(通过获取空字符),然后将 char
加载到 string
.
如果 List<string>
是 List<char
或 HashSet<char>
,您可以简化它。然后你可以删除 new string
部分。
我就是这样做的
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();
如果此检查将使用 HashSet<>
would be more performant than a linear search on a List<>
进行多次。即使性能不是问题,HashSet<>
也可能更好地表示数据及其使用方式,因为每个元素都是唯一的并且排序无关紧要。
这里我使用了 char
的 HashSet<>
...
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()
are the recommended way to normalize case 以来,我将受限字符从小写更改为大写,以进行不区分大小写的比较。然后您可以像这样以不区分大小写的方式执行检查...
if (!restrictedChars.Contains(char.ToUpperInvariant(dir[0])))
{
// Do stuff...
}
或者,您可以使用 string
的 HashSet<>
并传入不区分大小写的 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...
}
使用这种方法,输入 HashSet<>
的受限字符 string
的大小写无关紧要。