ฉันจะแทนที่ Line Breaks ภายในสตริงใน C # ได้อย่างไร
ฉันจะแทนที่ Line Breaks ภายในสตริงใน C # ได้อย่างไร
คำตอบ:
ใช้แทนที่ด้วย Environment.NewLine
myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;เป็นที่กล่าวถึงในบทความอื่น ๆ ถ้าสตริงมาจากสภาพแวดล้อมอื่น (OS) แล้วคุณจะต้องแทนที่ว่าสภาพแวดล้อมโดยเฉพาะอย่างยิ่งการดำเนินงานของการควบคุมตัวอักษรบรรทัดใหม่
วิธีแก้ไขปัญหาที่โพสต์จนถึงการแทนที่เท่านั้นEnvironment.NewLineหรือล้มเหลวหากสตริงการแทนที่มีตัวแบ่งบรรทัดเนื่องจากพวกเขาเรียกstring.Replaceหลายครั้ง
นี่คือโซลูชันที่ใช้นิพจน์ทั่วไปเพื่อสร้างการแทนที่ทั้งสามด้วยการส่งผ่านสายเดียว ซึ่งหมายความว่าสตริงการแทนที่สามารถมีตัวแบ่งบรรทัดได้อย่างปลอดภัย
string result = Regex.Replace(input, @"\r\n?|\n", replacementString);เพื่อขยายคำตอบของ The.Anyi.9 คุณควรระวังการแตกบรรทัดในการใช้งานทั่วไปด้วย ขึ้นอยู่กับแหล่งที่มาของไฟล์ของคุณคุณอาจต้องการตรวจสอบให้แน่ใจว่าคุณได้พบกับทางเลือกทั้งหมด ...
string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);คุณควรจะไป ...
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);พอ
                    \r\nคุณจะจบลงด้วยสตริงการเปลี่ยนสองครั้ง - ไม่เหมาะ
                    ฉันจะใช้ Environment.Newline เมื่อฉันต้องการแทรก newline สำหรับสตริง แต่ไม่ลบบรรทัดใหม่ทั้งหมดออกจากสตริง
ขึ้นอยู่กับแพลตฟอร์มของคุณคุณสามารถมีการขึ้นบรรทัดใหม่ประเภทต่าง ๆ ได้แม้ในแพลตฟอร์มเดียวกันบ่อยครั้งที่การขึ้นบรรทัดใหม่นั้นใช้ โดยเฉพาะเมื่อจัดการกับรูปแบบไฟล์และโปรโตคอล
string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}หากรหัสของคุณควรทำงานในสภาพแวดล้อมที่แตกต่างกันฉันจะพิจารณาใช้Environment.NewLineค่าคงที่เนื่องจากเป็นรหัสเฉพาะที่newlineใช้ในสภาพแวดล้อมเฉพาะ
line = line.Replace(Environment.NewLine, "newLineReplacement");อย่างไรก็ตามหากคุณได้รับข้อความจากไฟล์ที่มาจากระบบอื่นนี่อาจไม่ใช่คำตอบที่ถูกต้องและคุณควรแทนที่ด้วยค่าคงที่บรรทัดใหม่ที่ใช้ในระบบอื่น ซึ่งโดยปกติจะเป็นหรือ\n\r\n
อย่าลืมว่าการแทนที่ไม่ได้ทำการแทนที่ในสตริง แต่ส่งคืนสตริงใหม่ด้วยอักขระที่ถูกแทนที่ ต่อไปนี้จะลบตัวแบ่งบรรทัด (ไม่แทนที่) ฉันจะใช้วิธีการ @Brian R. Bondy หากแทนที่ด้วยวิธีอื่นอาจใช้วิธีการต่อเติม อย่าลืมตรวจสอบค่าว่างก่อนโทรแทนที่หรือวิธีการขยายให้
string line = ...
line = line.Replace( "\r", "").Replace( "\n", "" );เป็นวิธีการขยาย:
public static class StringExtensions
{
   public static string RemoveLineBreaks( this string lines )
   {
      return lines.Replace( "\r", "").Replace( "\n", "" );
   }
   public static string ReplaceLineBreaks( this string lines, string replacement )
   {
      return lines.Replace( "\r\n", replacement )
                  .Replace( "\r", replacement )
                  .Replace( "\n", replacement );
   }
}''ใน C # ได้ - ไม่มีสิ่งใดเป็นถ่านเปล่า จะ'\0'ทำงานแทนไหม
                    string.Emptyดีขึ้นโดยทั้งหมดใช้มัน
                    เพื่อให้แน่ใจว่าวิธีที่เป็นไปได้ทั้งหมดของการแบ่งบรรทัด (Windows, Mac และ Unix) จะถูกแทนที่คุณควรใช้:
string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');และในคำสั่งนี้เพื่อไม่ให้มีการแบ่งบรรทัดพิเศษเมื่อคุณพบการรวมกันของตัวอักษรสิ้นสุดบรรทัด
ถ้าคุณต้องการที่จะ "ทำความสะอาด" บรรทัดใหม่ความคิดเห็น Flamebaud โดยใช้ regex @"[\r\n]+"เป็นตัวเลือกที่ดีที่สุด
using System;
using System.Text.RegularExpressions;
class MainClass {
  public static void Main (string[] args) {
    string str = "AAA\r\nBBB\r\n\r\n\r\nCCC\r\r\rDDD\n\n\nEEE";
    Console.WriteLine (str.Replace(System.Environment.NewLine, "-"));
    /* Result:
    AAA
    -BBB
    -
    -
    -CCC
    DDD---EEE
    */
    Console.WriteLine (Regex.Replace(str, @"\r\n?|\n", "-"));
    // Result:
    // AAA-BBB---CCC---DDD---EEE
    Console.WriteLine (Regex.Replace(str, @"[\r\n]+", "-"));
    // Result:
    // AAA-BBB-CCC-DDD-EEE
  }
}ฉันต้องการแทนที่\r\nด้วยค่าขนส่งคืนจริงและป้อนบรรทัดและแทนที่\tด้วยแท็บจริง ดังนั้นฉันจึงคิดสิ่งต่อไปนี้:
public string Transform(string data)
{
    string result = data;
    char cr = (char)13;
    char lf = (char)10;
    char tab = (char)9;
    result = result.Replace("\\r", cr.ToString());
    result = result.Replace("\\n", lf.ToString());
    result = result.Replace("\\t", tab.ToString());
    return result;
}ทำไมไม่ทั้งสองล่ะ
string ReplacementString = "";
Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);หมายเหตุ:แทนที่strinด้วยชื่อของสายป้อนของคุณ
var answer = Regex.Replace(value, "(\n|\r)+", replacementString);ใช้วิธีการแทนที่ ()
Line.Replace("\n", "whatever you want to replace with");วิธีที่ดีที่สุดในการเปลี่ยน linebreaks อย่างปลอดภัยคือ
yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n")             //handling mac linebreaksที่ควรสร้างสตริงที่มีเฉพาะ \ n (เช่น linefeed) เป็นการแบ่งบรรทัด รหัสนี้มีประโยชน์ในการแก้ไข linebreaks ผสมเช่นกัน
ในฐานะที่เป็นสายใหม่ที่สามารถคั่นด้วย\n, \rและ\r\nเป็นครั้งแรกที่เราจะแทนที่\rและ\r\nมี\nและมีเพียงข้อมูลสตริงแล้วแยก
บรรทัดต่อไปนี้ควรไปที่parseCSVวิธีการ:
function parseCSV(data) {
    //alert(data);
    //replace UNIX new lines
    data = data.replace(/\r\n/g, "\n");
    //replace MAC new lines
    data = data.replace(/\r/g, "\n");
    //split into rows
    var rows = data.split("\n");
}string s = Regex.Replace(source_string, "\n", "\r\n");หรือ
string s = Regex.Replace(source_string, "\r\n", "\n");ขึ้นอยู่กับว่าคุณต้องการไปทางไหน
หวังว่ามันจะช่วย
ตัวเลือกอื่นคือการสร้างข้อความที่มีStringReaderปัญหา บนเครื่องอ่านทำ.ReadLine()แบบวนซ้ำ จากนั้นคุณมีบรรทัดที่แยกจากกันไม่ว่าตัวคั่น (ที่สอดคล้องหรือไม่สอดคล้องกัน) จะมีอะไร ด้วยสิ่งนี้คุณสามารถดำเนินการตามที่คุณต้องการ; ความเป็นไปได้อย่างหนึ่งคือการใช้StringBuilderและเรียก.AppendLineมัน
ข้อดีคือคุณปล่อยให้กรอบงานตัดสินใจว่าอะไรคือ "ตัวแบ่งบรรทัด"
หากคุณต้องการแทนที่เฉพาะบรรทัดใหม่:
var input = @"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";
var match = @"[\\ ]+";
var replaceWith = " ";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);
Console.WriteLine("output: " + x);หากคุณต้องการแทนที่บรรทัดใหม่แท็บและช่องว่างสีขาว:
var input = @"sdfhlusdkuidfs\r\ndfgdgfd";
var match = @"[\\s]+";
var replaceWith = "";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input, match, replaceWith);
Console.WriteLine("output: " + x);