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

.NET 作者: Rector 495阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

如题,在.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#程序开发中如何删除字符串中非字母/数字/横线的其他字符?方法有哪些呢?

发布于: 2018-02-09 11:04:50
分享扩散:

文章评论

获取验证码