にスペースのためにC#で文字列を比較duplicate.But問題は、私はは、私は、ユーザー名のためにC#で文字列を比較したい
1つのユーザ名があるthem.For例では、シンボルとスペースを持つ文字列を比較する方法でありますユーザー名は:AK - Username
最初は空白文字なし、2番目は空白文字付きです。
私はあなただけの文字列を分割することができます[AK username]
にスペースのためにC#で文字列を比較duplicate.But問題は、私はは、私は、ユーザー名のためにC#で文字列を比較したい
1つのユーザ名があるthem.For例では、シンボルとスペースを持つ文字列を比較する方法でありますユーザー名は:AK - Username
最初は空白文字なし、2番目は空白文字付きです。
私はあなただけの文字列を分割することができます[AK username]
ユーザーができるよう比較するスペースを削除し、再度参加することはできませんそれ
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");
}
別のアプローチ:
それはしかし完璧ではありません。あなたは一度ユーザーが取ったあまりにも多くの文字をキャプチャする - または彼のニックネームにスペースがあるという問題があります。しかし、多分あなたはより多くの世話をするので、正規表現を少し洗練することができます。それを見てみよう、または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();
}
}
}
"AK username"、 "AK-Username"、 "AK - Username"はすべて等しいと比較しなければならないと言っていますか? –
2つのユーザー名が同じであるというアプローチでは100%を特定することはできません。したがって、重複の90%を検出するような、共感できる目標を設定する必要があります。あなたは同じ文字(他の記号が削除されている場合)と編集距離<= 3の場合、距離を編集してユーザー名を比較し、2つの名前を同じものとすることができます – csharpfolk
また、 – csharpfolk