Replace the string of special characters in C#
我的要求是:
I have to replace some special characters like * '" , _ & # ^ @ with
string.Empty , and I have to replace blank spaces with- .
这是我的代码:
1 2 3 4 5 | Charseparated = Charseparated .Replace("*","") .Replace("'","") .Replace("&","") .Replace("@","") ... |
要替换的字符太多,我必须使用要避免的
是否有另一种有效的方法来删除特殊字符,但同时用
我相信,最好是在下面使用正则表达式
1 | s/[*'",_&#^@]/ /g |
您可以为此目的使用
1 2 3 4 5 |
使用正则表达式
1 | Regex.Replace("Hello*Hello'Hello&Hello@Hello Hello", @"[^0-9A-Za-z ,]","").Replace("","-") |
它将用string.Empty和Space替换所有特殊字符,用"-"
进行一系列更改并对其进行迭代:
1 2 3 4 5 6 7 8 9 10 |
您可以尝试使用LINQ:
1 2 3 4 5 6 | var source ="lala * lalala @ whowrotethis # ohcomeon &"; var result = string.Concat(source.Select(c => c == ' ' ?"-" :"*'",_&#^@".Contains(c) ?"" : c.ToString())); |
LINQ和char []方式:
1 | string f = Filter("*WHAT/ #PO#PO"); |
它返回WHAT-POPO:
1 2 3 4 5 6 7 8 |
OP要求一种"有效"的方式来替换字符串。
就使用Regex而言,性能不是最佳解决方案(如果是可读性或方便性,则可能是...)。
相反,StringBuilder的性能要好得多,如果处理大数据,这可能变得很重要。
1 2 3 4 5 | StringBuilder sb = new StringBuilder(myString); foreach (string unwanted in collectionOfUnwantedStrings) { sb.Replace(unwanted, string.Empty); } |
string.Replace是可怕的,可怕的,可怕的,除最琐碎的任务外,其他任何地方都不应该由专业程序员使用。
字符串是不可变的。这意味着每次您执行string.replace(或myString = myString" lalala"等)时,系统都需要进行所有后勤工作(创建新指针,内容复制,垃圾回收等)。顺便说一句,帕特里克·帕特里克(Patrick)在上面的回答就做到了这一点(但具有更好的代码可读性)。
如果只需要执行几次,就没有问题了,并且代码可以立即读取。
但是一旦将此操作放入循环中,就需要以另一种方式编写它。我自己去找正则表达式:
1 2 | string inStr ="lala * lalala @ whowrotethis # ohcomeon &"; string outStr = Regex.Replace(inStr ,"[*|@|*|&]", string.Empty); |
您可以像这样使用正则表达式。
1 2 3 4 5 6 7 8 9 10 |
这是最理想,最简单的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 } |
将
1 2 3 | var res ="23#$36^45&".Split(new[] {'#', '$', '^', '&'}, StringSplitOptions.RemoveEmptyEntries) .Aggregate((s, s1) => s + s1); //"233645" |
1 | Regex.Replace(source_string, @"[^\\w\\d]","_"); |
这将在给定字符串(
使用特殊字符传递字符串。您只有一个没有特殊字符的字符串。注意-在"可替换"列表中添加特殊字符。
1 2 3 4 5 6 | protected string hasSpecialChar(string input) { string[] replaceables = new[] { @"","|","!","#","$","%","&","/","=","?","?","?","@","£","§","€","{","}","^",";","'","<",">",",","`" }; string rxString = string.Join("|", replaceables.Select(s => Regex.Escape(s))); return Regex.Replace(input, rxString,"-"); } |
在一次采访中我问了同样的问题...给了我一个包含特殊字符的字符串,并要求我从输入字符串中删除特殊字符,然后将其反转。
这是简单有效的程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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; } } |