我查看过其他帖子,所有帖子都知道不需要的字符。 就我而言,我有一堆我想要的角色,我只想保留它们。
我的代码太乱了:
eval 'return math.pow(2, 53) ' 0
(integer) 9007199254740992
我想要的字符:private string RemoveUnwantedChar(string input)
{
string correctString = "";
for (int i = 0; i < input.Length; i++)
{
if (char.IsDigit(input[i]) || input[i] == '.' || input[i] == '-' || input[i] == 'n'
|| input[i] == 'u' || input[i] == 'm' || input[i] == 'k' || input[i] == 'M'
|| input[i] == 'G' || input[i] == 'H' || input[i] == 'z' || input[i] == 'V'
|| input[i] == 's' || input[i] == '%')
correctString += input[i];
}
return correctString;
}
和0123456789
答案 0 :(得分:7)
您可以使用LINQ:
var allowedChars = "0123456789numkMGHzVs";
var result = String.Join("", input.Where(c => allowedChars.Any(x => x == c)));
另一种选择:
var result = String.Join("", str.Where(c => allowedChars.Contains(c)));
答案 1 :(得分:3)
您可以将String.Concat
+ Enumerable.Where
与HashSet<T>.Contains
:
HashSet<char> AllowedChars = new HashSet<char>("0123456789numkMGHzVs%-.");
private string RemoveUnwantedChar(string input)
{
return string.Concat(input.Where(AllowedChars.Contains));
}
以下是使用StringBuilder
和HashSet<T>
的另一种有效方法:
HashSet<char> AllowedChars = new HashSet<char>("0123456789numkMGHzVs%-.");
private string RemoveUnwantedChar(string input)
{
StringBuilder sb = new StringBuilder(input.Length);
foreach (char c in input)
if (AllowedChars.Contains(c))
sb.Append(c);
return sb.ToString();
}
答案 2 :(得分:2)
你可以这样做:
// create a lookup hashset
private static HashSet<char> _allowedChars = new HashSet<char>("0123456789numkMGHzVs%-.".ToArray());
private string FilterString(string str)
{
// tempbuffer
char[] buffer = new char[str.Length];
int index = 0;
// check each character
foreach (var ch in str)
if (_allowedChars.Contains(ch))
buffer[index++] = ch;
// return the new string.
return new String(buffer, 0, index);
}
所以诀窍是,创建一个哈希集来验证每个字符。 &#39;凌乱&#39;就像你说的那样,正在创造新的弦乐,并且会激发记忆力。还要尽量避免使用许多嵌套的if
语句。 (就像你想避免的那样)
如果你喜欢linq,你可以这样做:
// create a lookup hashset
private static HashSet<char> _allowedChars = new HashSet<char>("0123456789numkMGHzVs%-.".ToArray());
private string FilterString2(string str)
{
return new String(
str.Where(ch => _allowedChars.Contains(ch)).ToArray());
}
但这会降低它的可读性。
答案 3 :(得分:1)
如果你使用LINQ,你可以这样做:
char[] validChars = "0123456789numkMGHzVs%-.".ToArray();
var newString = "Teststring012";
string filtered = string.Join("", newString.Where(x => validChars.Contains(x)));
答案 4 :(得分:1)
我喜欢这种清晰易读的Regex解决方案。
public string RemoveUnwantedChar(string input) {
return Regex.Replace(input, "[^0-9numkMGHzVs%\\-.]", "");
}