C#从字符串中删除不需要的字符

时间:2015-11-02 09:44:34

标签: c# string char

我查看过其他帖子,所有帖子都知道不需要的字符。 就我而言,我有一堆我想要的角色,我只想保留它们。

我的代码太乱了:

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

5 个答案:

答案 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.WhereHashSet<T>.Contains

一起使用
HashSet<char> AllowedChars = new HashSet<char>("0123456789numkMGHzVs%-.");
private string RemoveUnwantedChar(string input)
{
    return string.Concat(input.Where(AllowedChars.Contains));
}

以下是使用StringBuilderHashSet<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%\\-.]", "");
}