从字符串中删除所有英文字母。

3

我需要删除字符串中所有的英文字母。

我编写了以下代码:

StringBuilder str = new StringBuilder();
foreach(var letter in test)
{   
    if(letter >= 'a' && letter <= 'z')
        continue;
    str.Append(letter); }

什么是最快的方法?

3
你的意思是不是拉丁字母?http://zh.wikipedia.org/wiki/%E6%8B%89%E4%B8%81%E5%AD%97%E6%AF%8D - Bazzz
2
你的程序为什么需要这部分快速?你对它进行过性能分析吗? - Greg Hewgill
@Bazzz - 维基百科页面暗示“英文字母表”可能更正确 - 古典拉丁字母表不包含J或W。 :) - Will A
1
@Bazzz:支持@Will A的评论,英文字母是拉丁字母表,但并不完全相同。 - BoltClock
@BoltClock - +1 - quid pro quo. - Will A
2
这肯定可以用 Linq 查询完成:运行最慢,阅读最困难!! - David Heffernan
3个回答

2
使用正则表达式替换方法,并给出[a-z]|[A-Z]。

OP没有明确说明“最快”是什么意思,但就执行速度而言,这肯定比发布的版本要慢。 - hemp

1

试试这个:

var str = test.Where(item => item < 'A' || item > 'z' || (item > 'Z' && item < 'a'));

@Frédéric Hamidi:这里提供的条件是匹配OP在问题中提供的条件。 - Akram Shahda
@Akram,不是的,提问者的代码只排除小写字母并匹配所有其他字符。 - Frédéric Hamidi
@Akram,抱歉,那仍然不起作用(它将匹配所有字符)。您是否测试了您更新的答案中的代码? - Frédéric Hamidi
@Akram,item < 'a' || item > 'Z'将匹配所有字符。 item > 'z' && item < 'A'不会匹配任何字符。由于这两个条件被“OR”在一起,因此将匹配所有字符。 - Frédéric Hamidi
@Frédéric Hamidi:我猜你想说的是,AZ字符排在az字符之前?是这样吗? - Akram Shahda
显示剩余2条评论

0
使用这个方法来执行如下操作...

public static string RemoveSpecialCharacters(string str)

{

    StringBuilder sb = new StringBuilder();

    foreach (char c in str)

    {

        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))

            continue;

        else

            sb.Append(c);


    }
    return sb.ToString();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接