2016-05-28 8 views
0
途中

にスペースのためにC#で文字列を比較duplicate.But問題は、私はは、私は、ユーザー名のためにC#で文字列を比較したい

1つのユーザ名があるthem.For例では、シンボルとスペースを持つ文字列を比較する方法でありますユーザー名は:AK - Username

最初は空白文字なし、2番目は空白文字付きです。

私はあなただけの文字列を分割することができます[AK username]

+1

"AK username"、 "AK-Username"、 "AK - Username"はすべて等しいと比較しなければならないと言っていますか? –

+0

2つのユーザー名が同じであるというアプローチでは100%を特定することはできません。したがって、重複の90%を検出するような、共感できる目標を設定する必要があります。あなたは同じ文字(他の記号が削除されている場合)と編集距離<= 3の場合、距離を編集してユーザー名を比較し、2つの名前を同じものとすることができます – csharpfolk

+1

また、 – csharpfolk

答えて

0

ユーザーができるよう比較するスペースを削除し、再度参加することはできませんそれ

string str="AK Username"; 
string str1 = "AKUsername"; 
string[] SplittedStrings = str.Split(" "); 
str = ""; 

for(int i=0; i<SplittedStrings.Length; i++) 
{ 
    str += SpittedStrings[i]; 
} 

if(String.Equals(str,str1,StringComparison.OrdinalIgnoreCase)) 
{ 
    MessageBox.Show("Equal"); 
} 

EDIT:は、私はちょうどあなたがしたいと言って以下のコメントを見ました」 AK-Username "と" AK - Username "が等しくなるようにします。私はコードをリファクタリングして、下に記述しています!ここ

string str="AK - Username"; 
string str1 = "AK-Username"; 
string[] SplittedStrings = str.Split("-"); 
str = ""; 

for(int i=0; i<SplittedStrings.Length; i++) 
{ 
    str += SpittedStrings[i].Trim(); 
} 

if(String.Equals(str,str1,StringComparison.OrdinalIgnoreCase)) 
{ 
    MessageBox.Show("Equal"); 
} 
0

別のアプローチ:

それはしかし完璧ではありません。あなたは一度ユーザーが取ったあまりにも多くの文字をキャプチャする - または彼のニックネームにスペースがあるという問題があります。しかし、多分あなたはより多くの世話をするので、正規表現を少し洗練することができます。それを見てみよう、またはWhereとReplaceの前に空白をフィルターし、*ではなく、Singe Pointで置き換えてください。しかしそれはあなた次第です。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<String> similarStrings = new List<String> {"abc", "ab-c", "hfcx-h", "hfcxh", "hf -- cx --- h"}; 
      foreach (String tempString in similarStrings) 
      { 
       String foreachvar = tempString; 

       Console.Write("Similiar Strings to " + tempString + " >>> "); 
       foreachvar = System.Text.RegularExpressions.Regex.Replace(foreachvar, @"\s|-", @".*"); 
       List<String> filtered = similarStrings.Where<String>(item => !item.Equals(tempString) && System.Text.RegularExpressions.Regex.IsMatch(item, foreachvar)).ToList<String>(); 
       foreach (String filteredTemp in filtered) 
       { 
        Console.Write(filteredTemp + " "); 
       } 
       Console.WriteLine(""); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 
関連する問題