Tolong beri tahu kami lebih lanjut: apa yang dimaksud dengan "jeda baris" bagi Anda? Anda ingin menggantinya dengan apa?
Jay Bazuzi
ha ha. Saya sedang mengecek hal yang sama untuk di java ketika saya menemukan System.getProperty ("line.separator") ingin mengetahui rekan di C #. posting Anda membantu saya.
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 .
Pertama tidak bekerja untuk saya. Setelah beberapa penelitian, saya menemukan solusinya: Saya harus menggunakan 'using System;' atau 'System.Environment.NewLine'
Smolla
12
Tidak menghapus semua karakter baris baru. Coba string ini "\ n \ r \ nPesan saya \ r \ n \ n \ r \ n adalah ini. \ N \ n \ r \ n"
Shakti Prakash Singh
13
Secara umum, saya suka solusi ini. Namun, perlu dicatat bahwa bahkan pada OS yang sama, baris baru yang sebenarnya mungkin tidak cocok. Ini terjadi pada saya mengapa pemrosesan kembali SQL. Baris baru adalah \ n, sedangkan Environment.NewLine adalah \ r \ n. Hasilnya adalah tidak ada yang cocok sehingga baris baru tetap.
Dono
@Lakukan> di mana data SQL berasal? Mungkin dari sumber luar yang berurusan dengan jalur baru dengan cara UNIX. Itu masalah dengan format data, bukan dengan OS atau metode ini ...
Laurent S.
Ini harus menjadi salah satu metode statis dari kelas String. .NET itu sendiri harus dapat mendeteksi format jeda baris sumber dalam sebuah string dan mengubahnya menjadi format Environment.NewLine \ r \ n ...
Dean Kuga
442
Solusi yang diposting sejauh ini hanya penggantian Environment.NewLineatau gagal jika string pengganti berisi jeda baris karena mereka memanggil string.Replacebeberapa 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);
jadi pepatah Anda melakukan Regex.Replace (input, @ "[\ r \ n] +", replacementString) tidak akan menyelesaikan tugas yang sama?
flamebaud
7
@flamebaud Tidak, itu akan menghasilkan hasil yang berbeda jika ada beberapa jeda baris berturut-turut. "\ r \ n? | \ n" akan mengganti setiap jeda baris sementara "[\ r \ n] +" akan melakukan penggantian tunggal untuk sejumlah jeda baris.
David Hammond
Bagi mereka yang khawatir tentang beberapa jeda baris: / (\ r \ n? | \ N) / gm
BobbyA
4
Ini sebenarnya solusi yang tepat jika Anda ingin menghapus jeda baris dalam string yang mungkin berasal dari OS yang berbeda. Contoh yang bagus adalah pemformatan JSON. +1
Bastien Vandamme
1
Jika string kata demi kata (@ awalan) tidak digunakan, maka Anda harus memiliki dua garis miring terbalik di mana-mana ia digunakan, sehingga jawaban oleh @mark_byers di atas masih benar. Awalan @ membuatnya sehingga backslash adalah bagian dari string yang harus digunakan Regex sebagai karakter pelarian.
Kirk Liemohn
173
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 ...
Pertama saya suka lingkungan thingi lebih baik, tetapi jika String tidak berasal dari sistem yang berjalan, itu tidak akan berfungsi. +1
Flo
1
tidak Line.Replace("\n", replaceWith).Replace("\r", replaceWith);cukup?
Thomas Ayoub
5
Tidak, karena jika Anda memilikinya, \r\nAnda akan mendapatkan string pengganti dua kali - tidak ideal.
ZombieSheep
1
Apakah Anda tidak membutuhkan string literal? string RemoveBreaks = Line.Replace (@ "\ r \ n", replaceWith) .Replace (@ "\ n", replaceWith) .Replace (@ "\ r", replaceWith);
Shawn Dotey
2
@ShawnDotey tidak perlu, kami ingin mengganti karakter kontrol, bukan urutan backslash dan huruf.
N. Kudryavtsev
38
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.
Ini adalah satu-satunya hal yang bekerja untuk saya ketika saya ingin menutup kode halaman web yang diambil ke satu baris (untuk membuat pola regex lebih mudah).
Paw Baltzersen
Sepenuhnya setuju dengan Brian R. Bondy. Solusi yang ditawarkan oleh Corin dan begitu banyak dipilih sangat naif, setidaknya.
Califf
18
Jika kode Anda seharusnya dijalankan di lingkungan yang berbeda, saya akan mempertimbangkan untuk menggunakan Environment.NewLinekonstanta, karena secara khusus newlinedigunakan 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 \natau \r\n.
Anda perlu menugaskan kembali ke variabel asli karena penggantian tidak terjadi.
tvanfosson
@driss Saya ingin tahu bagaimana Anda memilih konstanta baris baru yang benar ketika Anda tidak tahu dari mana sistem file berasal ... solusi ini tampaknya benar-benar UNIVERSAL.
Califf
14
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","");
tidak bisa ada ''di C # - tidak ada yang namanya char kosong. apakah akan '\0'bekerja?
Shevek
1
@Shevek - hanya menggunakan kutipan yang salah. Pasti telah melakukan cukup banyak javascript pada hari saya menjawab ini.
tvanfosson
@ Califf - itu setara, tidak lebih baik.
tvanfosson
2
kesalahan yang Anda buat di sini membuktikan bahwa itu lebih baik. Sebagian besar perusahaan tempat saya bekerja memiliki standar pengkodean - JANGAN MENGGUNAKAN LITERAL HARDCODED.
Califf
2
@ Califf "kesalahan" yang saya buat tidak akan dibuat dalam IDE dengan Intellisense juga tidak akan dikompilasi. Jika Anda merasa itu string.Emptylebih baik, gunakan saja.
tvanfosson
10
Untuk memastikan semua kemungkinan cara pemutusan saluran (Windows, Mac dan Unix) diganti, Anda harus menggunakan:
Jawaban terbaik untuk mengganti baris baru, untuk sebagian besar kasus.
Shahbaz Ahmad
Terima kasih atas kode contoh yang bermanfaat ini. Saya diperbaiki melalui sytnax ini: Regex.Replace (str, @ "[\ r \ n] +", "-")
Sedat Kumcu
6
Saya perlu mengganti \r\ndengan carriage return dan line feed \tyang sebenarnya dan ganti dengan tab yang sebenarnya. Jadi saya datang dengan yang berikut:
publicstringTransform(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;}
Karena baris baru dapat dibatasi oleh \n, \rdan \r\n, pertama kita akan mengganti \rdan \r\ndengan\n , dan hanya kemudian membagi string data.
Baris berikut harus menuju ke parseCSVmetode:
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 rowsvar rows = data.split("\n");}
Pilihan lain adalah membuat StringReaderover 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 StringBuilderdan menelepon.AppendLine .
Keuntungannya adalah, Anda membiarkan kerangka memutuskan apa yang merupakan "jeda baris".
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);
Jawaban:
Gunakan ganti dengan
Environment.NewLine
Seperti disebutkan dalam posting lain, jika string berasal dari lingkungan lain (OS) maka Anda harus mengganti lingkungan tertentu yang menerapkan karakter kontrol baris baru .
sumber
Solusi yang diposting sejauh ini hanya penggantian
Environment.NewLine
atau gagal jika string pengganti berisi jeda baris karena mereka memanggilstring.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.
sumber
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 ...
harus membuat Anda pergi ...
sumber
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.
sumber
Jika kode Anda seharusnya dijalankan di lingkungan yang berbeda, saya akan mempertimbangkan untuk menggunakan
Environment.NewLine
konstanta, karena secara khususnewline
digunakan di lingkungan spesifik.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
.sumber
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.
Sebagai metode ekstensi:
sumber
''
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:
dan dalam urutan ini, untuk tidak membuat jeda baris tambahan, ketika Anda menemukan beberapa kombinasi karakter garis akhir.
sumber
jika Anda ingin "membersihkan" baris baru, komentar flamebaud menggunakan regex
@"[\r\n]+"
adalah pilihan terbaik.sumber
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:sumber
Mengapa tidak keduanya?
Catatan: Ganti
strin
dengan nama string input Anda.sumber
sumber
Gunakan metode .Replace ()
sumber
Cara terbaik untuk mengganti linebreak dengan aman adalah
yang seharusnya menghasilkan string dengan hanya \ n (mis. linefeed) sebagai linebreak. kode ini juga berguna untuk memperbaiki linebreak campuran.
sumber
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:sumber
atau
tergantung ke arah mana Anda ingin pergi.
Semoga ini bisa membantu.
sumber
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 aStringBuilder
dan menelepon.AppendLine
.Keuntungannya adalah, Anda membiarkan kerangka memutuskan apa yang merupakan "jeda baris".
sumber
Jika Anda hanya ingin mengganti baris baru:
Jika Anda ingin mengganti baris baru, tab, dan spasi putih:
sumber