C# 字符串清理和格式化
我的应用程序中有一个URL格式化程序,但问题是客户希望能够输入特殊字符,如: :|/-“&*#@ 我有一个字符串:C# 字符串清理和格式化,c#,asp.net,C#,Asp.net,我的应用程序中有一个URL格式化程序,但问题是客户希望能够输入特殊字符,如: :|/-“&*#@ 我有一个字符串: string myCrazyString = ":|/-\“‘&*#@"; 我有一个传递另一个字符串的函数: public void CleanMyString(string myStr) { } 如何将传递给“myStr”的字符串与“myCrazyString”进行比较,以及“myStr”中是否有要删除的字符 因此,如果我转到我的函数: “这是一个”cra@zy:
string myCrazyString = ":|/-\“‘&*#@";
我有一个传递另一个字符串的函数:
public void CleanMyString(string myStr)
{
}
如何将传递给“myStr”的字符串与“myCrazyString”进行比较,以及“myStr”中是否有要删除的字符
因此,如果我转到我的函数:
“这是一个”cra@zy:我|消息/an-d我要#清除它“
它应返回:
“这是一条疯狂的信息,我想清理它”
如何在我的CleanMyString函数中做到这一点?尝试使用正则表达式。您可以尝试使用if语句,如果存在字符,则提及疯狂
if (myCrazyString.Contains("@"))
{
Console.WriteLine("This string is out of controL!");
}
Regex也是一个好主意(也许更好)使用正则表达式:
pattern = @"(:|\||\/|\-|\\|\“|\‘|\&|\*|\#|\@)";
System.Text.RegularExpressions.Regex.Replace(inputString, pattern, string.Empty);
- 按
|
- 要删除特殊字符,如
本身,请使用\
,因此\
将\\\
作为普通字符处理\
尝试使用正则表达式。不使用正则表达式的解决方案,仅用于可用性目的:
static string clear(string input)
{
string charsToBeCleared = ":|/-\“‘&*#@";
string output = "";
foreach (char c in input)
{
if (charsToBeCleared.IndexOf(c) < 0)
{
output += c;
}
}
return output;
}
静态字符串清除(字符串输入)
{
字符串charsToBeCleared=“:\/-\”&*\@”;
字符串输出=”;
foreach(输入中的字符c)
{
if(charsToBeCleared.IndexOf(c)<0)
{
输出+=c;
}
}
返回输出;
}
您可以像其他人提到的那样使用正则表达式,或者像这样编写代码:
char[] myCrazyChars = "\"\':|/-\\“‘&*#@".ToCharArray();
string myCrazyString = "this ' is a\" cra@zy: me|ssage/ an-d I& want#to clea*n it";
string[] splittedCrazyString = myCrazyString.Split(myCrazyChars);
string notCrazyStringAtAll = string.Join("", splittedCrazyString);
这里有一个非常简单的方法。根据“疯狂字符串”中的所有字符拆分字符串,然后将它们重新连接在一起,而不包含坏字符
string myCrazyString = @":|/-\“‘&*#@";
string str = @"this ' is a"" cra@zy: me|ssage/ an-d I& want#to clea*n it";
string[] arr = str.Split(myCrazyString.ToCharArray(), StringSplitOptions.None);
str = string.Join(string.Empty, arr);
另一种可能的解决办法:
namespace RemoveChars
{
class Program
{
static string str = @"this ' is a\“ cra@zy: me|ssage/ an-d I& want#to clea*n it";
static void Main(string[] args)
{
CleanMyString(str);
}
public static void CleanMyString(string myStr)
{
string myCrazyString = @":|/-\“‘&*#@";
var result = "";
foreach (char c in myStr)
{
var t = true; // t will remain true if c is not a crazy char
foreach (char ch in myCrazyString)
if (c == ch)
{
t = false;
break;
}
if (t)
result += c;
}
}
}
}
为什么要删除这些字符?这似乎是一个正则表达式问题,但我有点困惑,为什么客户希望能够输入这些字符,而您又想删除它们?为什么不阻止客户输入这些字符?是的,一些疯狂的客户说,要获得ou,必须做的不仅仅是从myStr中删除疯狂的字符t在您的示例中:)仅删除疯狂字符将导致“这是一条疯狂的消息,我想清除它”哦,太好了,如果我有一个| | | |?
pattern=“[|/-\”&*.#@];
是更好的选择answer@user好问题,如果你有\
,那么就用\\\
来处理它。因此模式将是pattern=@”(!|@&\\\\\\”
,请注意,我在字符串处添加了
。否则您必须使用它\\\\/code>,比如模式=“(!|@&\\\\\\\\\\)”
最后一个,如果要删除的字符是\那么我会这样做吗?它不会尝试替换第二个字符,并且在添加“太:(lol?@user:不会的,\\sopattern=@(!|@&\\\\\\\\\\\\\)
通常是转义字符。所以\|will escape |和\\ will escape \谢谢你,我喜欢这个答案谢谢你,熊猫,你真的在处理“#”这个案子。
namespace RemoveChars
{
class Program
{
static string str = @"this ' is a\“ cra@zy: me|ssage/ an-d I& want#to clea*n it";
static void Main(string[] args)
{
CleanMyString(str);
}
public static void CleanMyString(string myStr)
{
string myCrazyString = @":|/-\“‘&*#@";
var result = "";
foreach (char c in myStr)
{
var t = true; // t will remain true if c is not a crazy char
foreach (char ch in myCrazyString)
if (c == ch)
{
t = false;
break;
}
if (t)
result += c;
}
}
}
}