首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >高效的C#搜索和替换字符串中的字符数组

高效的C#搜索和替换字符串中的字符数组
EN

Stack Overflow用户
提问于 2012-06-20 01:55:05
回答 3查看 7.8K关注 0票数 5

我有一个例子。

代码语言:javascript
运行
复制
string str ='Àpple';
string strNew="";
char[] A = {'À','Á','Â','Ä'};
char[] a = {'à','á','â','ä'};

我想查看一下str,看看是否找到用Ascii代码'A‘替换的内容。所以结果应该是:

代码语言:javascript
运行
复制
strNew = 'Apple';

下面是我的代码:

代码语言:javascript
运行
复制
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];
}

但是compare函数不起作用,那么我还可以使用什么其他函数呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-20 01:57:15

听起来你可以直接使用:

代码语言:javascript
运行
复制
if (A.Contains(str[i]))

但肯定有更有效的方法来做到这一点。特别是,避免在循环中进行字符串连接。

我的猜测是,有一些Unicode标准化方法也不需要对所有这些数据进行硬编码。我确定我记得在某个地方,关于编码回退,但我不能确定它...编辑:我怀疑它与String.Normalize有关--至少值得一看。

至少,这会更有效率:

代码语言:javascript
运行
复制
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);
票数 5
EN

Stack Overflow用户

发布于 2012-06-20 01:57:56

这应该是可行的:

代码语言:javascript
运行
复制
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];
}
票数 2
EN

Stack Overflow用户

发布于 2012-06-20 02:06:15

尝试使用正则表达式(首先替换为"A“,然后替换为"a":

代码语言:javascript
运行
复制
string result = Regex.Replace("Àpple", "([ÀÁÂÄ])", "A", RegexOptions.None);

然后你也可以对"a“做同样的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11106565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档