我正在尝试从字符串集合中删除带有无法识别字符的字符串。实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
由于Array(假设string[]
)在删除项目时没有重新调整大小,因此无论如何都需要创建新项目。因此,ToArray()
的基本LINQ过滤将为您提供新的数组。
myArray = myArray.Where(s => !ContainsSpecialCharacters(s)).ToArray();
答案 1 :(得分:1)
要删除包含您无法识别的任何字符的字符串: (EG:如果你想接受小写字母,那么" foo @ bar"将被拒绝")
^[A-Z]$
注意:这对包含换行符的字符串不起作用,但如果需要支持,可以调整它
要删除包含完全字符的字符串,您无法识别: (EG:如果你想接受小写字母,那么" foo @ bar"会被接受,因为它确实包含至少一个小写字母)
^
字符,以^开头,以$结尾。例如,如果您的"已识别"字符是大写的A到Z,它是^[^A-Z]$
答案 2 :(得分:0)
我会查看Linq的where方法,以及包含您正在寻找的字符的regular expression。在伪代码中:
return myStringCollection.Where(!s matches regex)
答案 3 :(得分:0)
这就是你想要的。
List<string> strings = new List<string>()
{
"one",
"two`",
"thr^ee",
"four"
};
List<char> invalid_chars = new List<char>()
{
'`', '-', '^'
};
strings.RemoveAll(s => s.Any(c => invalid_chars.Contains(c)));
strings.ForEach(s => Console.WriteLine(s));
生成输出:
one
four
答案 4 :(得分:0)
This question对我认为您正在寻找的内容有一些类似的答案。但是,我认为你想要包括所有字母,数字,空格和标点符号,但排除其他所有内容。那是准确的吗?如果是这样,这应该为你做到:
char[] arr = str.ToCharArray();
arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c) ||
char.IsWhiteSpace(c) || char.IsPunctuation(c))));
str = new string(arr);