【问题标题】:Adding a newline into a string in C#在 C# 中将换行符添加到字符串中
【发布时间】:2010-09-18 11:06:51
【问题描述】:

我有一个字符串。

string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";

我需要在字符串中每次出现“@”符号后添加一个换行符。

我的输出应该是这样的

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

【问题讨论】:

  • “文本文件中的换行符无效”是什么意思?你是如何写入文本文件的?
  • 发布你用来写出文件的代码。 \r\n (windows - Environment.Newline) 或 \n (Unix) 应该可以工作...

标签: c# string


【解决方案1】:

如下所述更改您的字符串。

string strToProcess = "fkdfdsfdflkdkfk"+ System.Environment.NewLine +" dfsdfjk72388389"+ System.Environment.NewLine +"kdkfkdfkkl"+ System.Environment.NewLine +"jkdjkfjd"+ System.Environment.NewLine +"jjjk"+ System.Environment.NewLine;

【讨论】:

    【解决方案2】:

    只要你想在任何字符串中使用Environment.NewLine。一个例子:

    string text = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
    
    text = text.Replace("@", "@" + System.Environment.NewLine);
    

    【讨论】:

    • 但是我需要把这个信息写在像这样的文本文件中 fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@换行符在文本文件中无效。
    • 这不是一个好的解决方案,因为 System.String(别名string)是一个不可变对象,这意味着整个字符串都被复制过来了。最好将 System.Text.StringBuilder 对象用于 String.Replace 等操作。
    • @Alexander 我会说字符串操作效率低下是我们在 2019 年不必再担心的问题。
    • @FilipeMadureira 在很多方面都大错特错。无论硬件改进与否,都没有任何借口可以故意成为一个糟糕的程序员。如果我们知道如何做得更好,我们应该这样做。除了想象在数据库系统的核心功能中使用的库中实现这一点 - 您还需要高性能。
    • @Alexander 成为一名优秀的程序员是一种奢侈,只有没有截止日期/糟糕工作/老板的人才能拥有,否则,我会同意你的看法。起初我认为我的观点很明确。
    【解决方案3】:

    然后只需将之前的答案修改为:

    Console.Write(strToProcess.Replace("@", "@" + Environment.NewLine));
    

    如果您不希望文本文件中出现换行符,请不要保留它。

    【讨论】:

      【解决方案4】:
      string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
      var result = strToProcess.Replace("@", "@ \r\n");
      Console.WriteLine(result);
      

      Output

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      【解决方案5】:
      using System;
      using System.IO;
      using System.Text;
      
      class Test
      {
          public static void Main()
          {
                   string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
                  strToProcess.Replace("@", Environment.NewLine);
                  Console.WriteLine(strToProcess);
          }
      }
      

      【讨论】:

        【解决方案6】:
        protected void Button1_Click(object sender, EventArgs e)
        {
            string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
            str = str.Replace("@", "@" + "<br/>");
            Response.Write(str);       
        }
        

        【讨论】:

        • 欢迎来到 SO 社区。谢谢你回答这个问题。但是,最好添加一些关于为什么会起作用的解释。
        【解决方案7】:

        您也可以使用string[] something = text.Split('@')。确保使用单引号将“@”括起来以将其存储为char 类型。 这会将字符存储到并包括每个“@”作为数组中的单个单词。然后,您可以使用 for 循环输出每个 (element + System.Environment.NewLine) 或使用 System.IO.File.WriteAllLines([file path + name and extension], [array name]) 将其写入文本文件。如果指定的文件在该位置不存在,它将被自动创建。

        【讨论】:

          【解决方案8】:

          根据您对其他所有人的回复,您正在寻找类似的内容。

          string file = @"C:\file.txt";
          string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
          string[] lines = strToProcess.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries);
          
          using (StreamWriter writer = new StreamWriter(file))
          {
              foreach (string line in lines)
              {
                  writer.WriteLine(line + "@");
              }
          }
          

          【讨论】:

            【解决方案9】:

            你可以像这样在@符号后添加一个换行符:

            string newString = oldString.Replace("@", "@\n");  
            

            你也可以在Environment类中使用NewLine属性(我认为是Environment)。

            【讨论】:

            • 但是我需要把这个信息写在像这样的文本文件中 fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@换行符在文本文件中无效。
            【解决方案10】:
            string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
            str = str.Replace("@", Environment.NewLine);
            richTextBox1.Text = str;
            

            【讨论】:

              【解决方案11】:

              正如其他人所说,换行符会在 Windows 的文本文件中为您提供一个新行。 尝试以下方法:

              using System;
              using System.IO;
              
              static class Program
              {
                  static void Main()
                  {
                      WriteToFile
                      (
                      @"C:\test.txt",
                      "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@",
                      "@"
                      );
              
                      /*
                      output in test.txt in windows =
                      fkdfdsfdflkdkfk@
                      dfsdfjk72388389@
                      kdkfkdfkkl@
                      jkdjkfjd@
                      jjjk@ 
                      */
                  }
              
                  public static void WriteToFile(string filename, string text, string newLineDelim)
                  {
                      bool equal = Environment.NewLine == "\r\n";
              
                      //Environment.NewLine == \r\n = True
                      Console.WriteLine("Environment.NewLine == \\r\\n = {0}", equal);
              
                      //replace newLineDelim with newLineDelim + a new line
                      //trim to get rid of any new lines chars at the end of the file
                      string filetext = text.Replace(newLineDelim, newLineDelim + Environment.NewLine).Trim();
              
                      using (StreamWriter sw = new StreamWriter(File.OpenWrite(filename)))
                      {
                          sw.Write(filetext);
                      }
                  }
              }
              

              【讨论】:

              • 现在只看到了你的 environment.newline == \r\n = true (也许我错过了它,因为它不是 C# 语法;))。此外,更多信息在这里msdn.microsoft.com/de-de/library/…。只是偶然发现了一个类似的问题,使用硬编码 \n 没有在 windows 中给我一个新行..
              【解决方案12】:

              一个简单的字符串替换就可以完成这项工作。看看下面的示例程序:

              using System;
              
              namespace NewLineThingy
              {
                  class Program
                  {
                      static void Main(string[] args)
                      {
                          string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
                          str = str.Replace("@", "@" + Environment.NewLine);
                          Console.WriteLine(str);
                          Console.ReadKey();
                      }
                  }
              }
              

              【讨论】:

                【解决方案13】:

                前面的答案很接近,但为了满足@ 符号保持接近的实际要求,您希望它是str.Replace("@", "@" + System.Environment.NewLine)。这将保留 @ 符号并为当前平台添加适当的换行符。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-30
                  • 2023-01-19
                  • 1970-01-01
                  • 2019-07-13
                  相关资源
                  最近更新 更多