5

私は例えば

string str ='Àpple';
string strNew="";
char[] A = {'À','Á','Â','Ä'};
char[] a = {'à','á','â','ä'};

strを調べて、見つかったものがAsciiコード「A」に置き換えられるかどうかを確認したいと思います。したがって、結果は次のようになります。

strNew = 'Apple';

これが私のコードです:

for (int i = 0; i < str.Length; i++)
{ 
    if(str[i].CompareTo(A))
       strNew += 'A'
    else if(str[i].CompareTo(a)) 
       strNew +='a'
    else
       strNew += str[i];
}

しかし、比較機能は機能しないので、他にどのような機能を使用できますか?

4

3 に答える 3

5

次のように使用できます。

if (A.Contains(str[i]))

しかし、これを行うには確かにより効率的な方法があります。特に、ループ内での文字列の連結は避けてください。

私の推測では、このすべてのデータをハードコーディングする必要のないUnicode正規化アプローチもあります。フォールバックのエンコードに関するどこかで覚えていると思いますが、指を置くことはできません...編集:String.Normalize少なくとも一見の価値があると思います。

少なくとも、これはより効率的です。

char[] mutated = new char[str.Length];
for (int i = 0; i < str.Length; i++)
{
    // You could use a local variable to avoid calling the indexer three
    // times if you really want...
    mutated[i] = A.Contains(str[i]) ? 'A'
               : a.Contains(str[i]) ? 'a'
               : str[i];
}
string strNew = new string(mutated);
于 2012-06-19T17:57:15.387 に答える
2

これは機能するはずです:

for (int i = 0; i < str.Length; i++)
{ 
    if(A.Contains(str[i]))
        strNew += 'A'
    else if(a.Contains(str[i])) 
          strNew +='a'
    else
        strNew += str[i];
}
于 2012-06-19T17:57:56.133 に答える
0

正規表現で試してください(最初に「A」に置き換え、次に「a」に置き換えます。

string result = Regex.Replace("Àpple", "([ÀÁÂÄ])", "A", RegexOptions.None);

そして、「a」についても同じことができます。

于 2012-06-19T18:06:15.070 に答える