我的要求是:
我必须用
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>
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;
}
}