我使用StreamReader打开文本文件并获取其内容。我需要从文件中抓取文本,没有任何转义字符(\ n,\ r,\“等)。谷歌现在让我失望。有什么想法吗?
答案 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' }));