Bagaimana saya bisa mengganti Line Breaks dalam string di C #?
Bagaimana saya bisa mengganti Line Breaks dalam string di C #?
Jawaban:
Gunakan ganti dengan Environment.NewLine
myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;
Seperti disebutkan dalam posting lain, jika string berasal dari lingkungan lain (OS) maka Anda harus mengganti lingkungan tertentu yang menerapkan karakter kontrol baris baru .
Solusi yang diposting sejauh ini hanya penggantian Environment.NewLine
atau gagal jika string pengganti berisi jeda baris karena mereka memanggil string.Replace
beberapa kali.
Inilah solusi yang menggunakan ekspresi reguler untuk membuat ketiga penggantian hanya dalam satu kali melewati string. Ini berarti bahwa string pengganti dapat dengan aman mengandung jeda baris.
string result = Regex.Replace(input, @"\r\n?|\n", replacementString);
Untuk memperluas jawaban The.Anyi.9, Anda juga harus mengetahui berbagai jenis pemisah jalur yang umum digunakan . Bergantung di mana file Anda berasal, Anda mungkin ingin melihat memastikan Anda menangkap semua alternatif ...
string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
harus membuat Anda pergi ...
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);
cukup?
\r\n
Anda akan mendapatkan string pengganti dua kali - tidak ideal.
Saya akan menggunakan Environment.Newline ketika saya ingin memasukkan baris baru untuk sebuah string, tetapi tidak untuk menghapus semua baris baru dari sebuah string.
Tergantung pada platform Anda, Anda dapat memiliki berbagai jenis baris baru, tetapi bahkan di dalam platform yang sama sering kali berbagai jenis baris baru digunakan. Khususnya ketika berhadapan dengan format file dan protokol.
string ReplaceNewlines(string blockOfText, string replaceWith)
{
return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}
Jika kode Anda seharusnya dijalankan di lingkungan yang berbeda, saya akan mempertimbangkan untuk menggunakan Environment.NewLine
konstanta, karena secara khusus newline
digunakan di lingkungan spesifik.
line = line.Replace(Environment.NewLine, "newLineReplacement");
Namun, jika Anda mendapatkan teks dari file yang berasal dari sistem lain, ini mungkin bukan jawaban yang benar, dan Anda harus mengganti dengan konstanta baris baru apa pun yang digunakan pada sistem lain. Biasanya akan \n
atau \r\n
.
Jangan lupa bahwa penggantian tidak melakukan penggantian dalam string, tetapi mengembalikan string baru dengan karakter yang diganti. Berikut ini akan menghapus jeda baris (bukan menggantikannya). Saya akan menggunakan metode @Brian R. Bondy jika menggantinya dengan sesuatu yang lain, mungkin dibungkus sebagai metode ekstensi. Ingatlah untuk memeriksa nilai nol terlebih dahulu sebelum memanggil Ganti atau metode ekstensi yang disediakan.
string line = ...
line = line.Replace( "\r", "").Replace( "\n", "" );
Sebagai metode ekstensi:
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 );
}
}
''
di C # - tidak ada yang namanya char kosong. apakah akan '\0'
bekerja?
string.Empty
lebih baik, gunakan saja.
Untuk memastikan semua kemungkinan cara pemutusan saluran (Windows, Mac dan Unix) diganti, Anda harus menggunakan:
string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');
dan dalam urutan ini, untuk tidak membuat jeda baris tambahan, ketika Anda menemukan beberapa kombinasi karakter garis akhir.
jika Anda ingin "membersihkan" baris baru, komentar flamebaud menggunakan regex @"[\r\n]+"
adalah pilihan terbaik.
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
}
}
Saya perlu mengganti \r\n
dengan carriage return dan line feed \t
yang sebenarnya dan ganti dengan tab yang sebenarnya. Jadi saya datang dengan yang berikut:
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;
}
var answer = Regex.Replace(value, "(\n|\r)+", replacementString);
Gunakan metode .Replace ()
Line.Replace("\n", "whatever you want to replace with");
Cara terbaik untuk mengganti linebreak dengan aman adalah
yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n") //handling mac linebreaks
yang seharusnya menghasilkan string dengan hanya \ n (mis. linefeed) sebagai linebreak. kode ini juga berguna untuk memperbaiki linebreak campuran.
Karena baris baru dapat dibatasi oleh \n
, \r
dan \r\n
, pertama kita akan mengganti \r
dan \r\n
dengan\n
, dan hanya kemudian membagi string data.
Baris berikut harus menuju ke parseCSV
metode:
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");
atau
string s = Regex.Replace(source_string, "\r\n", "\n");
tergantung ke arah mana Anda ingin pergi.
Semoga ini bisa membantu.
Pilihan lain adalah membuat StringReader
over the string yang dimaksud. Pada pembaca, lakukan .ReadLine()
dalam satu lingkaran. Maka Anda memiliki garis yang dipisahkan, tidak peduli apa (yang konsisten atau tidak konsisten) pemisah yang mereka miliki. Dengan itu, Anda dapat melanjutkan sesuai keinginan; satu kemungkinan adalah menggunakan a StringBuilder
dan menelepon.AppendLine
.
Keuntungannya adalah, Anda membiarkan kerangka memutuskan apa yang merupakan "jeda baris".
Jika Anda hanya ingin mengganti baris baru:
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);
Jika Anda ingin mengganti baris baru, tab, dan spasi putih:
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);