2010-08-26 4 views
2

Я буду читать файл со своего компьютера с помощьюКак обрезать недопустимые символы из строки

StreamReader sr = new StreamReader(FileName); 

      string str = sr.ReadToEnd(); 

В этом я получаю некоторые недопустимые символы, такие как/п,/г и некоторые другие.

Я хотел бы заменить незаконных символов пустым символом. Я попытался сделать массив символов, но я не в состоянии удалить те, так может ли один помочь мне

+2

Предположительно, вы знаете, что/r/n относится к разрыву строки? – Rushyo

ответ

3
string str = string.Join(string.Empty, File.ReadAllLines(FileName)); 
+0

Это звучит хорошо. Можете ли вы объяснить, как удалить все эти незаконные символы – Dotnet

+0

@Dorababu, все, что это делает, это удаление новых строк (\ r \ n) из файла. Я не знаю, что вы подразумеваете под незаконными символами, поскольку новые строки не являются незаконными символами, но у меня создалось впечатление, что вы искали удаление из файла, поэтому я предложил это решение. –

+0

ОК спасибо за решение – Dotnet

5

Вы можете использовать String.Replace метод:

string str = sr.ReadToEnd().Replace("\r", "").Replace("\n", ""); 

Однако это не очень хорошая идея, если строка и у вас длинный список незаконных символов, потому что каждый вызов Replace создаст новый экземпляр String. Лучшим вариантом было бы, чтобы отфильтровать недопустимые символы с помощью Linq:

char[] illegalChars = new[] { '\r', '\n' }; // add other illegal chars if needed 
char[] chars = sr.ReadToEnd().Where(c => !illegalChars.Contains(c)).ToArray(); 
string str = new String(chars); 

Однако вызов Contains добавляет накладные расходы, это быстрее, чтобы проверить непосредственно друг против незаконного характера:

char[] chars = sr.ReadToEnd().Where(c => c != '\r' && c != '\n').ToArray(); 
string str = new String(chars); 

И для полноты , вот еще быстрее версия:

StringBuilder sb = new StringBuilder(); 
foreach(char c in sr.ReadToEnd()) 
{ 
    if (c != '\r' && c != '\n') 
     sb.Append(c); 
} 
string str = sb.ToString(); 
+0

@Developer Art, я знаю, я уже редактировал свой ответ –

+0

Это выглядит очень креативно, но производительность LINQing будет страдать. – 2010-08-26 09:02:50

+0

sr.readtoend(), где это не существует na, то как я могу называть это – Dotnet

3
StreamReader sr = new StreamReader (FileName); 

StringBuilder sb = new StringBuilder (sr.ReadToEnd()); 

sb.Replace ("\r\n", String.Empty); 
sb.Replace ("\n", String.Empty); 

string hereIsYourString = sb.ToString(); 
+0

Вы должны использовать 'String.Empty' вместо' "" ' – Scoregraphic

+0

Да, согласитесь, это будет выглядеть чище. – 2010-08-26 09:00:27

+0

Проблема с Replace заключается в том, что StringBuilder постоянно перемещает символы в своем буфере. Гораздо быстрее предварительно фильтровать символы и добавлять их в StringBuilder по одному –

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