用C#替换特殊字符的字符串

25

我的要求是:

我需要将一些特殊字符,如 * ' " , _ & # ^ @,替换为 string.Empty,并将空格替换为 -

这是我的代码:

 Charseparated = Charseparated
    .Replace("*","")
    .Replace("'","")
    .Replace("&","")
    .Replace("@","") ...

我需要替换这么多字符,所以必须使用同样数量的Replace,但我想避免这种做法。

有没有其他高效的方法可以删除特殊字符、同时将空格替换为-


使用正则表达式 - Myrtle
2
只是想补充一下,如果这是关于生成有效文件名的问题,您可以使用 Sytem.IO.Path.GetInvalidFileNameChars 获取无效字符集。 - Georg Patscheider
3
有何特殊之处?这些并不是特殊字符。你是想清理文件路径吗?读取带引号的CSV文本?净化SQL输入?针对每种情况都有更好的替代方案,不需要使用替换操作。 - Panagiotis Kanavos
StringBuilder.Replace() 是一个更高效的替代方案,用于替换字符串中的内容,如此处所讨论。但是您仍然需要使用多个 Replace() 调用。 - Seth Denburg
你有一个问题。你用正则表达式解决了它。现在你有两个问题。(抱歉,我忍不住要说这句玩笑话 :)) - Daniel Williams
14个回答

1
你可以像这样使用正则表达式。
string Charseparated = "test * -";

var replacements = new Dictionary<string, string>()
{
   {"*", string.Empty},
   {" ", "-"}
};

var reg = new Regex(String.Join("|", replacements.Keys.Select(k => Regex.Escape(k))));
var reg_replace = reg.Replace(Charseparated, m => replacements[m.Value]);

0

传递具有特殊字符的字符串。你只得到没有特殊字符的字符串。注意 - 在“可替换”列表中添加你的特殊字符。

protected string hasSpecialChar(string input)
        {
            string[] replaceables = new[] { @"\", "|", "!", "#", "$", "%", "&", "/", "=", "?", "»", "«", "@", "£", "§", "", "{", "}", "^", ";", "'", "<", ">", ",", "`" };
            string rxString = string.Join("|", replaceables.Select(s => Regex.Escape(s)));
            return Regex.Replace(input, rxString, "-");
        }

问题还指定了空格应该用“-”替换,所以你需要对你的答案进行一点修改。 - Matt

0
String str = "Whatever???@@##$ is#$% in& here";
     
str = Regex.Replace(str,@"[^\w\d\s]","");

1
虽然这段代码可能可以解决问题,但是附上一个解释关于为什么这样解决问题会有助于提高您的帖子质量并有可能获得更多点赞。请记住,你回答的问题不只是给现在提问的人看,也是给未来的读者看的。请[编辑]你的答案,添加解释,并说明哪些限制和假设适用。 - Yunnosch
1
您可能还想在此页面上解释一下您的解决方案相对于现有类似解决方案的优势和更好的解释。 - Yunnosch

-1
在一次面试中,我被问到了同样的问题...我被给予了一个包含特殊字符的字符串,并被要求从输入字符串中删除特殊字符并将其反转。

这是一个简单而高效的程序:

public class Program
    {
        static void Main(string[] args)
        {
            string name = "T@T@P&!M#";

            Program obj = new Program();

            Console.WriteLine(obj.removeSpecialCharacters(name));

            Console.WriteLine(obj.reverseString(obj.removeSpecialCharacters(name)));

            Console.ReadLine();


        }

        private string removeSpecialCharacters(string input)
        {
            string[] specialCharacters = new string[] { "@", "&", "!", "#" };

            for (int i = 0; i < specialCharacters.Length; i++)
            {
                if (input.Contains(specialCharacters[i]))
                {
                    input = input.Replace(specialCharacters[i], "");
                }
            }

            return input;
        }

        private string reverseString(string input)
        {
            string reverseString = "";

            for (int i = input.Length - 1; i >= 0; i--)
            {
                reverseString = reverseString + input[i];
            }

            return reverseString;
        }
    }

请参考Regex.Replace获取更好的答案。 - jwdonahue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接