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 回答