从文件中读取没有特殊字符

时间:2011-04-19 14:09:07

标签: c# .net

我使用StreamReader打开文本文件并获取其内容。我需要从文件中抓取文本,没有任何转义字符(\ n,\ r,\“等)。谷歌现在让我失望。有什么想法吗?

5 个答案:

答案 0 :(得分:4)

您从文件中读取的文本中没有转义字符。编写字符串文字时会使用转义字符,例如在程序代码中。我假设你的意思是你想用普通空格替换任何写空格字符。

您可以使用正则表达式匹配空白字符并将其替换为空格。使用File.ReadAllText从文件中读取文本更容易:

string text = Regex.Replace(File.ReadAllText(fileName), @"[\r\n\t ]+", " ");

答案 1 :(得分:3)

为什么不直接拨打ReadToEnd然后Split字符串?

// using statement and whatever code here

var rawContent = sr.ReadToEnd();

var usefulContent = rawContent.Split(new []{ "\r\n", "\\" }, 
    StringSplitOptions.RemoveEmptyEntries);

注意:您需要在Split方法中调整分隔符;这只是一个例子。

你也可以简单地Replace不需要的字符:

// using statement and whatever code here

var rawContent = sr.ReadToEnd();

var usefulContent = rawContent
    .Replace("\r\n", "" )
    .Replace("\\", "");

答案 2 :(得分:1)

如果您在流式传输时尝试执行此操作,请在while循环中调用StreamReader.Read()并逐个测试字符。

如果您能够将整个文件内容捕获到字符串中,请使用正则表达式去除不需要的字符。查看RegexHero:http://regexhero.net/tester/

答案 3 :(得分:1)

假设您已在字符串s

中读取整个文件
for (int i = 0; i < s.Length; i++)
{
   if (char.IsLetterOrDigit(s, i)) // or if (!char.IsWhiteSpace(s, i))
   {
      // append to StringBuilder
   }
}

如果IsLetterOrDigit或IsWhiteSpace不符合您的需求,您可以创建自己的方法并调用它。

答案 4 :(得分:1)

您可以使用通用功能跳过所有不需要的字符:

public string SkipChars(string InputString, char[] CharsToSkip)
{
  string result = InputString;
  foreach (var chr in CharsToSkip)
  {
    result = result.Replace(chr.ToString(), "");
  }

  return result;
}

用法:

string test = "one\ntwo\tthree";

MessageBox.Show(SkipChars(test, new char[] { '\n', '\t' }));