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



我的要求是:

我必须用string.Empty替换一些特殊字符,如 *' "、_ &# ^ @ ,并且我必须用 - 替换空格。

这是我的代码:

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

对于要替换的这么多字符,我必须使用尽可能多的Replace我想避免的字符。

有没有另一种有效的方法来删除特殊字符,但同时用-替换空格?

我相信

,最好是在这里使用正则表达式,如下所示

s/[*'",_&#^@]/ /g

您可以将Regex类用于此目的

Regex reg = new Regex("[*'",_&#^@]");
str1 = reg.Replace(str1, string.Empty);
Regex reg1 = new Regex("[ ]");
str1 = reg.Replace(str1, "-");

使用正则表达式

Regex.Replace("Hello*Hello'Hello&Hello@Hello Hello", @"[^0-9A-Za-z ,]", "").Replace(" ", "-")

它将用字符串替换所有特殊字符。带有"-"<</p>

div class="one_answers"的空和空格>
Regex.Replace(source_string, @"[^wd]", "_");

这将替换给定字符串 ( source_string ( 中所有非字母和非数字的"_"。

进行一系列更改以进行迭代:

var replacements = new []
                   { new { Old = "*", New = string.Empty }
                   // all your other replacements, removed for brevity
                   , new { Old = " ", New = "-" }
                   }
foreach (var r in replacements)
{
    Charseparated = Charseparated.Replace(r.Old, r.New);
}

您可以尝试使用 LINQ

  var source = "lala * lalala @ whowrotethis # ohcomeon &";
  var result = string.Concat(source.Select(c => c == ' ' 
     ? "-" 
     : "*'",_&#^@".Contains(c) ? "" 
     : c.ToString()));

LINQ 和 char[] 方式:

   string f = Filter("*WHAT/ #PO#PO");

它返回 WHAT-POPO:

    private string Filter(string s)
    {
        var chars = new[] { '*', '/', '#' };
        var filteredChars = s.ToArray();
        return new string(filteredChars
                 .Where(ch => !chars.Contains(ch) )
                 .Select(ch => ch == ' ' ? '-' : ch).ToArray());
    }

这是最优化和最简单的方法

    public void foo()
    {
        string input = "A sample input a*b#c@d";
        string unwanted = "*'",_&#^@";
        List<char> unwantedChars = unwanted.ToList<char>();
        StringBuilder sb = new StringBuilder();
        input = input.Replace(' ', '-');
        foreach(char c in input)
        {
            if (!unwantedChars.Any(x => x == c))
                sb.Append(c);
        }
        string output = sb.ToString(); //A-sample-input-abcd
    }

字符串。替换是可怕的,可怕的,不应该被专业程序员用于任何地方,除了最微不足道的任务。

字符串是不可变的。这意味着每次你做一个string.place(或myString = myString + "lalala"等等(时,系统都需要做所有的后勤工作(创建新指针,复制内容,垃圾回收等(。顺便说一句,帕特里克上面的答案就是这样做的(但具有更好的代码可读性(。

如果这只需要做几次,这不是问题 - 并且代码立即可读。

但是一旦你把这个操作放在一个循环中,你就需要用另一种方式编写它。我会自己选择正则表达式:

string inStr = "lala * lalala @ whowrotethis # ohcomeon &";
string outStr = Regex.Replace(inStr , "[*|@|*|&]", string.Empty);

OP 要求一种"有效"的方式来替换字符串。

就性能而言,使用正则表达式并不是最好的解决方案(在可读性或方便性的情况下,它可能是......

相反,StringBuilder 的预处理效果要好得多,如果您处理大数据,这可能会变得很重要。

 StringBuilder sb = new StringBuilder(myString);
 foreach (string unwanted in collectionOfUnwantedStrings)
         {
             sb.Replace(unwanted, string.Empty);
         }

> 将 string.Split 与分隔符字符数组一起使用,并将它们聚合回 1 个字符串中。但是,用string.Empty替换和用"-"替换"必须单独完成。

        var res = "23#$36^45&".Split(new[] {'#', '$', '^', '&'}, StringSplitOptions.RemoveEmptyEntries)
            .Aggregate((s, s1) => s + s1);
        // "233645"

你可以像这样使用正则表达式。

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

传递带有特殊字符的字符串。 您只有没有特殊字符的字符串。注意 - 在"可替换项"列表中添加特殊字符。

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

在一次采访中也问过我同样的问题......我得到了一个包含特殊字符的字符串,并被要求从输入字符串中删除特殊字符然后反转它。

这是简单高效的程序:

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

最新更新