【问题标题】:Nomalize Two Strings Then Compare规范化两个字符串然后比较
【发布时间】:2014-01-28 11:46:55
【问题描述】:

我有 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 不是我需要担心的唯一前缀,还有其他前缀,例如A.P.K-D 等。不确定这是否会有所作为:/

感谢任何帮助,谢谢!

【问题讨论】:

    标签: c# string compare normalization


    【解决方案1】:

    如果您只想输入字母和数字,可以使用 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);
    

    【讨论】:

    • 那么我是否将字符串 a 和 b 转换为 char[]?并在仅获得字母和数字后将其转换回字符串?抱歉,我知道 var 使声明变得容易,但我想知道类型 0.0
    • 是的,您正在删除无效字符并将它们转换为 char 数组。然后再次使它们成为字符串,并使用 ToLower 使所有字符小写
    【解决方案2】:

    试试这个...

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

    它将替换所有特殊字符并为您提供规范化字符串。

    【讨论】:

      【解决方案3】:

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

         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();
          }
      

      【讨论】:

        猜你喜欢
        • 2016-08-29
        • 2021-09-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-05
        • 2017-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多