我有2个类似的字符串,除了一些特殊字符。是否有更好的方法来比较和检查是否相等?
string str1 = "Hello (T) How";
string str2 = "Hello [T] How";
if (str1.Replace("(", "").Replace(")", "").Replace("[", "").Replace("]", "") == str2.Replace("(", "").Replace(")", "").Replace("[", "").Replace("]", ""))
{
Console.WriteLine("Equal");
}
答案 0 :(得分:3)
using System;
using System.Globalization;
public class Example
{
public static void Main()
{
string str1 = "Hello (T) How";
string str2 = "Hello [T] How";
string str3 = "Hello [X] How";
var compare1And2 = String.Compare(str1, str2, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols);
var compare1And3 = String.Compare(str1, str3, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols);
System.Console.WriteLine(compare1And2); // 0
System.Console.WriteLine(compare1And3); // -1
}
}
答案 1 :(得分:2)
您只需使用正则表达式即可完成此操作。
Regex.Replace(str, @"[^0-9a-zA-Z]+", "");
这将替换您的字符串中的所有特殊字符 - 在您的情况下 -
if(Regex.Replace(str1, @"[^0-9a-zA-Z]+", "").Equals(Regex.Replace(str2, @"[^0-9a-zA-Z]+", "")))
{
// Write code here
}
此Regex
命名空间中的System.Text.RegularExpressions
类也可用
答案 2 :(得分:0)
你可以这样做:
string str1 = "Hello (T) How";
string str2 = "Hello [T] How";
bool isEqual = string.Join("", str1.ToCharArray().Where(c => char.IsLetter(c)).ToArray()) ==
string.Join("", str2.ToCharArray().Where(c => char.IsLetter(c)).ToArray());
基本上我在这里做的是在比较之前我只选择所有字母。