首页 / .NET / 正文

[.NET/C#].NET/C#程序开发中如何删除字符串中非字母/数字/横线的其他字符?方法有哪些呢?

3672 发布于: 2018-02-09 读完约需6分钟

问题描述

如题,在.NET/C#程序开发中,如何删除字符串中非字母/数字/横线的其他字符?具体的实现方法有哪些呢?

方案一

使用正则表达式Regex类的Replace("","")方法,如:

Regex rgx = new Regex("[^a-zA-Z0-9 -]");
str = rgx.Replace(str, "");

方案二

不使用正则表达式,因为正则表达式的可能存在性能问题,使用LinqFindAll(...)该当来实现,如下:

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);
}

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [.NET/C#].NET/C#程序开发中克隆/拷贝一个泛型集合List<T>的方法有哪些?

下一篇: [.NET/C#].NET/C#程序开发中使用程序重命名一个文件的方法有哪些呢?

本文永久链接码友网 » [.NET/C#].NET/C#程序开发中如何删除字符串中非字母/数字/横线的其他字符?方法有哪些呢?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册