簡體   English   中英

規范化兩個字符串然后比較

[英]Nomalize Two Strings Then Compare

我有 2 個字符串,它們都是某種參考號(有前綴和數字)。

string a = "R&D123";
string b = "R&D 123";

string astring b是兩個不同的用戶輸入,我試圖比較這兩個字符串是否匹配。

我知道我可以使用String.Compare()來檢查兩個字符串是否相同,但就像上面的例子一樣,它們可能是不同的字符串,但在技術上是一樣的。

因為它們都是用戶輸入(來自不同用戶),所以可以有幾種不同的格式。

"R&D123"
"R&D 123" //with space in between
"R.D.123 " //using period or other character
"r&d123" //different case
"RD123" //no special character
...etc

有沒有辦法我可以先“標准化”兩個字符串然后比較它們?

我知道一個易於理解的方法是使用string.Replace()將特殊字符和空格替換為空格並使用string.ToLower()所以我不必擔心案例。 但是這種方法的問題是,如果我有很多特殊字符,我會多次執行.Replace() ,這並不理想。

另一個問題是R&D並不是我需要擔心的唯一前綴,還有其他前綴,例如APKD等。不確定這是否會有所作為:/

任何幫助表示贊賞,謝謝!

如果您只想輸入字母和數字,可以使用 linq:

var array1 = a.Where(x =>char.IsLetterOrDigit(x)).ToArray();
var array2 = b.Where(x => char.IsLetterOrDigit(x)).ToArray();
var normalizedStr1 = new String(array1).ToLower();
var normalizedStr2 = new String(array2).ToLower();

String.Compare(normalizedStr1,normalizedStr2);

這可能不是最漂亮的方法,但它是最快的

   static void Main(string[] args)
    {
        string sampleResult = NormlizeAlphaNumeric("Hello wordl 3242348&&))&)*^&#R&#&R#)R#@)R#@R#R#@");

    }

    public static string NormlizeAlphaNumeric(string someValue)
    {
        var sb = new StringBuilder(someValue.Length);
        foreach (var ch in someValue)
        {
            if(char.IsLetterOrDigit(ch))
            {
                sb.Append(ch);
            }
        }
        return sb.ToString().ToLower();
    }

嘗試這個...

string s2 = Regex.Replace(s, @"[^[a-zA-Z0-9]]+", String.Empty);

它將替換所有特殊字符並為您提供規范化字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM