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.NewLine
ya da değiştirilen dize, string.Replace
birden ç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\n
iki 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 newline
kullanı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 \n
veya 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.Empty
daha 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\n
gerçek bir satır başı ve satır beslemesi ile ve değiştirme \t
gerç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
, \r
ve \r\n
ilk biz değiştiririz, \r
ve \r\n
ile\n
, ve ancak o zaman bölünmüş veri dizesi.
Aşağıdaki satırlar parseCSV
yö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 StringReader
konusu 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);