2015-01-22 4 views
-3

Я хочу спросить, как я могу удалить все символы из строки, которых нет в строке алфавита.Заменить все символы не в массиве

Я мог бы использовать цикл для проверки каждого символа, но мне нужно что-то с лучшей производительностью, потому что приложение должно обрабатывать несколько (до ~ 200) больших файлов. 1 строка = 1 содержимое файла

+1

Вы просматривали регулярные выражения? –

+5

_ «Я мог бы использовать для цикла для проверки каждого символа» _ - так или иначе, это должно произойти в любом случае. Просто сделайте это, используя цикл. – CodeCaster

+2

@roryap: Почему регулярное выражение было бы более эффективным, чем цикл 'for'? –

ответ

0

Другой способ заключается в использовании Regex:

var s1 = "hello world"; 
var s2 = "abcdefghijklmno"; 

var s3 = Regex.Replace(s1, "[^" + s2 + "]", ""); 

Console.WriteLine(s3); // helloold 

Если вы хотите, чтобы все алфавитные символы, вы можете установить s2 в "a-z" или "A-Z" или "a-zA-Z".

3

Одним из вариантов является использование LINQ:

var s1 = "hello world"; 
var s2 = "abcdefghijklmno"; 

var s3 = new String((from c1 in s1.ToCharArray() 
        join c2 in s2.ToCharArray() on c1 equals c2 
        select c1).ToArray()); 

Console.WriteLine(s3); // helloold 

Преимущество использования LINQ является то, что вы можете stream the data, чтобы не загружать весь файл в память.

Смежные вопросы