c#比较字符串,不考虑语言
我有一个例程,尝试在字符串列表中查找特定的术语c#比较字符串,不考虑语言,c#,string,C#,String,我有一个例程,尝试在字符串列表中查找特定的术语 int FindString(string term, List<string> stringList) { for (int i = 0; i < stringList.Count; i++) { if (stringList[i].Contains(term)) { return i; } } return -1; }
int FindString(string term, List<string> stringList)
{
for (int i = 0; i < stringList.Count; i++)
{
if (stringList[i].Contains(term))
{
return i;
}
}
return -1;
}
基本上,您需要根据自定义规则“规范化”字符串,然后执行搜索
由于没有公认的映射至少包含“拉丁B”等于“希腊B”,因此您必须构建自己的-基本字典字典可能就足够了
作为“标准化”的一部分,您也可以考虑数字映射——因为实际上有可用的Unicode官方信息。
因此,要规范化的总体代码如下所示:
var source = "А9"; // Cyrilic A9 - "\u0410\u0039"
var map = new Dictionary<char,char> { { 'А', 'A' } }; // Cyrillic to Latin
var chars = source.Select( c =>
CharUnicodeInfo.GetUnicodeCategory(c)==UnicodeCategory.DecimalDigitNumber?
CharUnicodeInfo.GetDigitValue(c).ToString()[0] :
map.ContainsKey(c) ? map[c] :
c);
var result = String.Join("", chars);
var term = "\u0041\u0039"; // Latin A9
Console.WriteLine(source.Contains(term));
Console.WriteLine(result.Contains(term));
var source=“А9”//西里尔语A9-“\u0410\u0039”
var map=新字典{{'А',A'};//西里尔语到拉丁语
var chars=source.Select(c=>
CharUnicodeInfo.GetUnicodeCegory(c)=UnicodeCegory.DecimalDigitNumber?
CharUnicodeInfo.GetDigitValue(c).ToString()[0]:
图[c]:
c) );
var result=String.Join(“,chars);
var term=“\u0041\u0039”//拉丁语A9
Console.WriteLine(source.Contains(term));
Console.WriteLine(result.Contains(term));
请提供您所遇到问题的具体工作示例。字符串“B4b”
在德语和英语中都是“B4b”
,对这两个字符串进行相等检查总是会得到true
。我认为您需要执行字符串。将与字符串比较。传入的不变量文化
枚举比较。您好,请提供一些字符串示例,因为字符串不会根据输入语言而更改。如果您提供您正在查找的字符串和正在搜索的字符串,则会更容易提供帮助。第二个字符串中的Β
是希腊字母Beta。这不是一个德语字母,甚至是一个不变的文化比较并不认为它们是同一个字母的变体。尽管它们的外观非常相似,但这就像期望P
和P
(或P
和Ρ
(Rho))被视为同一个字母一样。@Tsaras Ok,但它们“基本上不是相同的字符”(参见我编辑的评论)。我认为用英语搜索词搜索希腊文本听起来像是一件傻事。
var source = "А9"; // Cyrilic A9 - "\u0410\u0039"
var map = new Dictionary<char,char> { { 'А', 'A' } }; // Cyrillic to Latin
var chars = source.Select( c =>
CharUnicodeInfo.GetUnicodeCategory(c)==UnicodeCategory.DecimalDigitNumber?
CharUnicodeInfo.GetDigitValue(c).ToString()[0] :
map.ContainsKey(c) ? map[c] :
c);
var result = String.Join("", chars);
var term = "\u0041\u0039"; // Latin A9
Console.WriteLine(source.Contains(term));
Console.WriteLine(result.Contains(term));