2017-04-03 104 views
0

我已经搜索了这个,但我遇到的每个解决方案都涉及到regex女巫不是我的解决方案。C#Streamreader添加新行

我的问题很简单,我希望streamreader每次读到单词“ice”时都会添加一个新行。请记住,streamreader正在将输入读取为1行。

我的代码如下:

using (StreamReader sr = new StreamReader(stream)) 
{ 
    VarrileKeeper.s = sr.ReadToEnd(); 
    //Console.WriteLine(VarrileKeeper.s); 
    if (VarrileKeeper.s.ToString().Contains("ice")) 
    { 
     //insert newline in string 
    } 
    sr.Close(); 
} 
+2

怎么样的词_iceland_或别的东西containig字符_ice_? – Steve

+0

你想要*更新*文件或只读*它以这种方式? –

+0

你不能只用'Replace'吗? 'VarrileKeeper.s = sr.ReadToEnd()。Replace(“ice”,“ice”+ Environment.NewLine);' –

回答

0

尝试以下操作:

using (StreamReader sr = new StreamReader(stream)) 
{ 
    { 
     VarrileKeeper.s = sr.ReadToEnd(); 
     //Console.WriteLine(VarrileKeeper.s); 
      if (VarrileKeeper.s.ToString().Contains("ice")) 
      { 
       VarrileKeeper.s = VarrileKeeper.s.Replace("ice", "ice" + System.Environment.NewLine); 
      } 

      sr.Close(); 
     } 
} 
+0

这将只在最后添加行结束。 –

+0

是啊谢谢..更换会工作 - 看到更新 –

+0

检查现在..它会添加一条新的线冰.. –

2

看来,你的问题是非常简单的(或者你没有解释你的问题背后的复杂性)。

我宁愿使用有System.IO.File并以与string.replace解决您的问题:

string filename = "D:\\test.txt"; 
string output = System.IO.File.ReadAllText(filename).Replace("ice", "ice\n"); 
System.IO.File.WriteAllText(filename, output); 

希望这有助于!

+0

很好的答案,但可以做到不使用.txt,并仍然保持在一个字符串? – Taco2

+0

@PatrickHofman是公平的,它可以被简单地修正:'.Replace(“ice”,“ice \ n”)'(或者换行符的任何定义都值得你喜欢) –

1

一些与string.Split和的string.join能达到自己的目标

string temp = File.ReadAllText("yourfilename"); 
var parts = temp.Split(new string[] {"ice"}, StringSplitOptions.None); 
VarrileKeeper.s = string.Join("ice"+ Environment.NewLine, parts); 

但请记住,这是对字符序列滥,这意味着也更复杂的单词将被截断(威尼斯例如)

+1

我无法理解人们在离开时提出错误的答案实际答案坐在0 ...你有我的投票史蒂夫。 –

0

试试这个:

VarrileKeeper.s = string.Join(string.Empty, varrileKeeper.s.Split(' ').Select(x => x == "ice" ? x += Environment.NewLine : x += " ")); 
+0

它是做什么的? –

+0

取代VarrileKeeper。新版本包含每个“冰”字后的新行。 – daniell89