问题描述
如题,在.NET/C#程序开发中,如何删除字符串中非字母/数字/横线的其他字符?具体的实现方法有哪些呢?
方案一
使用正则表达式Regex类的Replace("","")方法,如:
Regex rgx = new Regex("[^a-zA-Z0-9 -]");
str = rgx.Replace(str, "");
方案二
不使用正则表达式,因为正则表达式的可能存在性能问题,使用Linq的FindAll(...)该当来实现,如下:
char[] arr = str.ToCharArray();
arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c)
                                  || char.IsWhiteSpace(c)
                                  || c == '-')));
str = new string(arr);
或者使用Linq的筛选条件来查询处理,如:
char[] arr = str.Where(c => (char.IsLetterOrDigit(c) ||
                             char.IsWhiteSpace(c) ||
                             c == '-')).ToArray();
str = new string(arr);
方案三
使用System.Linq,如:
string withOutSpecialCharacters = new string(stringWithSpecialCharacters.Where(c =>char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-').ToArray());
方案四
创建一个基于正则表达式的静态扩展方法,如:
public static class RegexConvert
{
    public static string ToAlphaNumericOnly(this string input)
    {
        Regex rgx = new Regex("[^a-zA-Z0-9]");
        return rgx.Replace(input, "");
    }
    public static string ToAlphaOnly(this string input)
    {
        Regex rgx = new Regex("[^a-zA-Z]");
        return rgx.Replace(input, "");
    }
    public static string ToNumericOnly(this string input)
    {
        Regex rgx = new Regex("[^0-9]");
        return rgx.Replace(input, "");
    }
}
调用方法:
string example = "asdf1234!@#$";
string alphanumeric = example.ToAlphaNumericOnly();
string alpha = example.ToAlphaOnly();
string numeric = example.ToNumericOnly();
方案五
使用char.IsControl()方法,如:
char[] arr = str.Where(c => !char.IsControl(c)).ToArray();
str = new string(arr);
方案六
一个高效且未使用正则表达式的实现方案:
public static string ToAlphaNumeric(string input)
{
    int j = 0;
    char[] newCharArr = new char[input.Length];
    for (int i = 0; i < input.Length; i++)
    {
        if (char.IsLetterOrDigit(input[i]))
        {
            newCharArr[j] = input[i];
            j++;
        }
    }
    Array.Resize(ref newCharArr, j);
    return new string(newCharArr);
}
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
 
            
发表评论
登录用户才能发表评论, 请 登 录 或者 注册