Remove unwanted characters from a string
By having a const string which contains all of your wanted chars, you could do either a simple call to Contains() or check if IndexOf() will return a value &gt; -1.  
using string concatenation in a loop is mostly a bad idea. Use a StringBuilder instead.  
omitting braces {} although they are optional for single lined if statements is a bad idea because it makes your code error prone.  


Implementing the mentioned points will lead to  

private const string allowedCharacters = "numkMGHzVs%-.";
private string RemoveUnwantedChar(string input)
{

    StringBuilder builder = new StringBuilder(input.Length);

    for (int i = 0; i &lt; input.Length; i++)
    {
        if (char.IsDigit(input[i]) || allowedCharacters.Contains(input[i]))
        {
            builder.Append(input[i]);
        }
    }
    return builder.ToString();
}  


@Caricorc made a good suggestion in the comments  


  In my opinion allowedCharacters should be an argument to the function to allow reusability.  


So by passing the allowedCharacters as an optional parameter with an additional check with IsNullOrEmpty().  

If performance is an issue, you could also pass a HashSet&lt;char&gt; to the method or have an overloaded method like so  

private string RemoveUnwantedChar(string input, string allowedCharacters = "0123456789numkMGHzVs%-.")
{

    if (string.IsNullOrEmpty(allowedCharacters)) { return input; }

    return RemoveUnwantedChar(input, new HashSet&lt;char&gt;(allowedCharacters));

}  
private string RemoveUnwantedChar(string input, HashSet&lt;char&gt; allowedCharacters)
{
    if (allowedCharacters.Count == 0) { return input; }

    StringBuilder builder = new StringBuilder(input.Length);

    for (int i = 0; i &lt; input.Length; i++)
    {
        if (allowedCharacters.Contains(input[i]))
        {
            builder.Append(input[i]);
        }
    }
    return builder.ToString();
}  


you can reuse it somewhere else.