C # 'da bir dize içindeki Satır Sonlarını nasıl değiştirebilirim?
C # 'da bir dize içindeki Satır Sonlarını nasıl değiştirebilirim?
Yanıtlar:
Değiştir ile kullan Environment.NewLine
myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;
Diğer gönderilerde de belirtildiği gibi, dize başka bir ortamdan (OS) geliyorsa, o belirli ortamların yeni satır kontrol karakterlerinin uygulanmasını değiştirmeniz gerekir .
Şimdiye kadar gönderilen çözümler ya yalnızca değiştirilir Environment.NewLineya da değiştirilen dize, string.Replacebirden çok kez çağırdıkları için satır kesmeleri içeriyorsa başarısız olur .
Burada, üç değiştirmenin tümünü dizenin üzerinden tek bir geçişte yapmak için normal bir ifade kullanan bir çözüm var. Bu, değiştirme dizesinin güvenli bir şekilde satır kesmeleri içerebileceği anlamına gelir.
string result = Regex.Replace(input, @"\r\n?|\n", replacementString);
The.Anyi.9'un cevabını genişletmek için , genel kullanımda farklı hat kopması türlerinin de farkında olmalısınız . Dosyanızın nereden geldiğine bağlı olarak, tüm alternatifleri yakaladığınızdan emin olmak isteyebilirsiniz ...
string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
gitmene izin vermeli ...
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);yeter?
\r\niki kez yedek dizeyle sonuçlanacaksınız - ideal değil.
Bir dize için bir yeni satır eklemek istediğimde, ancak bir dizeden tüm yeni satırları kaldırmak istemediğimde Environment.Newline'ı kullanırdım.
Platformunuza bağlı olarak farklı satırsonu türlerine sahip olabilirsiniz, ancak aynı platformun içinde bile genellikle farklı satırsonu türleri kullanılır. Özellikle dosya formatları ve protokolleri ile uğraşırken.
string ReplaceNewlines(string blockOfText, string replaceWith)
{
return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}
Kodunuzun farklı ortamlarda çalışması gerekiyorsa , belirli bir ortamda Environment.NewLineözel olarak newlinekullanıldığı için sabiti kullanmayı düşünürüm.
line = line.Replace(Environment.NewLine, "newLineReplacement");
Ancak, metni başka bir sistemden kaynaklanan bir dosyadan alırsanız, bu doğru yanıt olmayabilir ve diğer sistemde kullanılan yeni satır sabitiyle değiştirmelisiniz. Genellikle \nveya olacaktır \r\n.
Değişimin dizede değiştirmeyi yapmadığını, ancak karakterlerin değiştirildiği yeni bir dizeyi döndürdüğünü unutmayın. Aşağıdakiler satır sonlarını kaldıracaktır (değiştirilmemelidir). @Brian R. Bondy'nin yöntemini, başka bir şeyle değiştiriyor olsaydım, belki de bir uzatma yöntemi olarak sarılırdım. Değiştir'i veya sağlanan uzantı yöntemlerini çağırmadan önce null değerleri kontrol etmeyi unutmayın.
string line = ...
line = line.Replace( "\r", "").Replace( "\n", "" );
Genişletme yöntemleri olarak:
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 # olamaz - boş bir karakter diye bir şey yoktur. olacak '\0'yerine işe?
string.Emptydaha iyi olduğunu düşünüyorsanız, elbette kullanın.
Tüm olası satır sonlarının (Windows, Mac ve Unix) değiştirildiğinden emin olmak için şunları kullanmalısınız:
string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');
ve bu sırada, satır sonu karakterlerinin bir kombinasyonunu bulduğunuzda ekstra satır sonları yapmamak.
yeni satırları "temizlemek" istiyorsanız, regex kullanarak flamebaud yorum @"[\r\n]+"en iyi seçimdir.
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
}
}
Ben değiştirmek için gerekli \r\ngerçek bir satır başı ve satır beslemesi ile ve değiştirme \tgerçek bir sekme ile. Bu yüzden aşağıdakileri buldum:
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);
.Replace () yöntemini kullanın
Line.Replace("\n", "whatever you want to replace with");
Çizgi kabarcıklarını güvenli bir şekilde değiştirmenin en iyi yolu
yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n") //handling mac linebreaks
satır sonu olarak yalnızca \ n (ör. satır besleme) olan bir dize üretmelidir. bu kod, karışık satır aralıklarını düzeltmek için de kullanışlıdır.
Yeni hat olarak ile sınırlanmış olabilir \n, \rve \r\nilk biz değiştiririz, \rve \r\nile\n , ve ancak o zaman bölünmüş veri dizesi.
Aşağıdaki satırlar parseCSVyönteme gitmelidir :
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");
veya
string s = Regex.Replace(source_string, "\r\n", "\n");
Hangi yöne gitmek istediğinize bağlı olarak.
Umarım yardımcı olur.
Başka bir seçenek, söz StringReaderkonusu dizenin üzerinde bir over oluşturmaktır . Okuyucuda .ReadLine()bir döngü yapın. Ardından, (tutarlı veya tutarsız) ayırıcılara bakılmaksızın, satırları ayırırsınız. Bununla istediğiniz gibi devam edebilirsiniz; bir olasılık birStringBuilder ve.AppendLine .
Avantaj, çerçevenin neyin "satır sonu" nu oluşturduğuna karar vermesine izin vermenizdir.
Yalnızca yeni satırları değiştirmek istiyorsanız:
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);
Yeni satırları, sekmeleri ve beyaz boşlukları değiştirmek istiyorsanız:
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);