एक स्ट्रिंग C # में लाइन ब्रेक्स बदलें


512

मैं सी # में एक स्ट्रिंग के भीतर लाइन ब्रेक कैसे बदल सकता हूं?


2
कृपया हमें और बताएं: आपके लिए "लाइन ब्रेक" क्या है? आप उन्हें किसके साथ बदलना चाहते हैं?
Jay Bazuzi

हा हा। मैं जावा में उसी के लिए जाँच कर रहा था जब मुझे पता चला कि System.getProperty ("line.separator") C # में समकक्ष को जानने के लिए उत्सुक था। आपकी पोस्ट ने मेरी मदद की।
रवीशा

जवाबों:


715

के साथ बदलें का उपयोग करें Environment.NewLine

myString = myString.Replace(System.Environment.NewLine, "replacement text"); //add a line terminating ;

जैसा कि अन्य पोस्ट में उल्लेख किया गया है, यदि स्ट्रिंग दूसरे वातावरण (OS) से आती है, तो आपको नए लाइन नियंत्रण वर्णों के उस विशेष वातावरण को लागू करने की आवश्यकता होगी ।


8
पहले यह मेरे लिए काम नहीं किया। कुछ शोध के बाद, मुझे समाधान मिला: मुझे 'सिस्टम का उपयोग करना;' या 'System.Environment.NewLine'
Smolla

12
सभी न्यूलाइन चार्ट को नहीं हटाया। इस स्ट्रिंग का प्रयास करें "\ n \ r \ n संदेश संदेश \ r \ n \ n \ r \ n यह है। \ n \ n \ r \ n"
शक्ति प्रकाश सिंह

13
सामान्य तौर पर, मुझे यह समाधान पसंद है। हालाँकि, ध्यान दें कि एक ही OS पर, वास्तविक न्यूलाइन्स मेल नहीं खा सकते हैं। यह मेरे लिए हुआ क्यों प्रसंस्करण SQL लौट आए। नई पंक्तियाँ \ n थीं, जबकि पर्यावरण.न्यूलाइन \ n \ n थी। नतीजा यह हुआ कि कुछ भी मेल नहीं खा रहा था इसलिए नई लाइनें बनी रहीं।
डोनो

@ डोनो> एसक्यूएल डेटा कहां से आता है? संभवतः बाहर के स्रोत से नई लाइनों से निपटने के लिए UNIX तरीका है। यह डेटा प्रारूप के साथ एक समस्या है, ओएस या इस पद्धति के साथ नहीं ...
लॉरेंट एस।

यह स्ट्रिंग वर्ग के स्थिर तरीकों में से एक होना चाहिए। .NET स्वयं किसी स्ट्रिंग में स्रोत पंक्ति विराम के प्रारूप का पता लगाने में सक्षम होना चाहिए और इसे पर्यावरण में परिवर्तित कर सकता है। NewLine \ r \ n प्रारूप ...
डीन कूगा

442

अब तक पोस्ट किए गए समाधान या तो केवल प्रतिस्थापित Environment.NewLineकरते हैं या वे विफल हो जाते हैं यदि प्रतिस्थापन स्ट्रिंग में लाइन ब्रेक होते हैं क्योंकि वे string.Replaceकई बार कॉल करते हैं।

यहां एक समाधान है जो स्ट्रिंग में सिर्फ एक पास में तीनों प्रतिस्थापन करने के लिए एक नियमित अभिव्यक्ति का उपयोग करता है। इसका मतलब है कि प्रतिस्थापन स्ट्रिंग में सुरक्षित रूप से लाइन ब्रेक हो सकते हैं।

string result = Regex.Replace(input, @"\r\n?|\n", replacementString);

3
इसलिए आपका कहना है कि Regex.Replace (इनपुट, @ "[\ r \ n] +", प्रतिस्थापनस्ट्रीमिंग) एक ही कार्य को पूरा नहीं करेगा?
ज्योतिबाड

7
@flamebaud नहीं, अगर एक पंक्ति में कई पंक्ति विराम होते हैं, तो एक अलग परिणाम होगा। "[A \ n! | \ n" प्रत्येक पंक्ति विराम को प्रतिस्थापित करेगा जबकि "[\ r \ n] +" किसी भी पंक्ति विखंडन के लिए एक एकल प्रतिस्थापित करेगा।
डेविड हैमंड

कई लाइन ब्रेक के बारे में चिंतित लोगों के लिए: / (\ r \ n
?;

4
यह वास्तव में सही समाधान है यदि आप एक स्ट्रिंग में लाइन ब्रेक को हटाना चाहते हैं जो विभिन्न ओएस से आ सकता है। अच्छा उदाहरण JSON स्वरूपण है। +1
बैस्टियन वंदामे

1
यदि शब्दशः स्ट्रिंग (@ उपसर्ग) का उपयोग नहीं किया जाता है, तो आपको हर जगह एक पंक्ति में दो बैकस्लैम लगाने की आवश्यकता होगी, इसलिए ऊपर @mark_byers द्वारा उत्तर अभी भी सही है। @ उपसर्ग इसे इसलिए बनाता है ताकि बैकस्लैश स्ट्रिंग का हिस्सा हो, जिसे रेगेक्स के लिए इसे भागने के पात्र के रूप में उपयोग करना होगा।
कर्क लीमोहॉन

173

The.Anyi.9 के उत्तर का विस्तार करने के लिए, आपको सामान्य उपयोग में विभिन्न प्रकार के लाइन ब्रेक के बारे में भी पता होना चाहिए । निर्भर करता है कि आपकी फ़ाइल कहां से उत्पन्न हुई है, आप यह सुनिश्चित करना चाहते हैं कि आप सभी विकल्पों को पकड़ सकें ...

string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);

आपको जाना चाहिए ...


6
पहले मुझे पर्यावरण की बातें बेहतर लगीं, लेकिन अगर स्ट्रिंग डनट सिस्टम से आती है, तो यह काम नहीं करेगा। +1
फ़्लो

1
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);पर्याप्त नहीं है?
थॉमस अय्यूब

5
नहीं, क्योंकि यदि आपके पास \r\nआप दो बार प्रतिस्थापन स्ट्रिंग के साथ समाप्त हो जाएंगे - आदर्श नहीं।
ज़ोंबीशेप

1
क्या आपको स्ट्रिंग शाब्दिक की आवश्यकता नहीं है? स्ट्रिंग हटा दिया गया है = रेखा। पंक्ति (@ "\ r \ n", प्रतिस्थापित करें) .Replace (@ "\ n", प्रतिस्थापित करें) .Replace (@ "\ r", प्रतिस्थापन);
शॉन डोटे

2
@ शनडॉट को कोई आवश्यकता नहीं है, हम नियंत्रण वर्णों को बदलना चाहते हैं, बैकस्लैश और पत्र के अनुक्रमों को नहीं।
एन। कुद्र्यावत्सेव

38

मैं एनवायरनमेंट का उपयोग करता हूँ। जब मैं एक स्ट्रिंग के लिए एक नई लाइन सम्मिलित करना चाहता था, लेकिन एक स्ट्रिंग से सभी न्यूलाइन्स को हटाने के लिए नहीं।

आपके प्लेटफ़ॉर्म के आधार पर आपके पास अलग-अलग प्रकार की नई सुर्खियाँ हो सकती हैं, लेकिन यहाँ तक कि एक ही मंच के भीतर अक्सर विभिन्न प्रकार की नई-नई सूचियों का उपयोग किया जाता है। विशेष रूप से फ़ाइल स्वरूपों और प्रोटोकॉल के साथ काम करते समय।

string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}

यह केवल एक चीज है जो मेरे लिए काम करती है जब मैं एक एकल लाइन के लिए एक पुनः प्राप्त वेब पेज कोड को संक्षिप्त करना चाहता था (रेगेक्स को आसान बनाने के लिए)।
बाल्टी में बाल बाल्ट्जर्सन

पूरी तरह से ब्रायन आर बॉडी से सहमत हैं। कोरिन द्वारा पेश किया गया घोल और उबला हुआ आटा बहुत भोला है, कम से कम।
कैलिफ

18

यदि आपका कोड अलग-अलग वातावरण में चलना चाहिए, तो मैं Environment.NewLineस्थिरांक का उपयोग करने पर विचार करूंगा , क्योंकि यह विशेष रूप newlineसे विशिष्ट वातावरण में उपयोग किया जाता है।

line = line.Replace(Environment.NewLine, "newLineReplacement");

हालाँकि, यदि आपको किसी अन्य सिस्टम पर उत्पन्न होने वाली फ़ाइल से पाठ मिलता है, तो यह सही उत्तर नहीं हो सकता है, और आपको अन्य सिस्टम पर जो भी नई स्थिरांक का उपयोग किया जाता है, उससे प्रतिस्थापित करना चाहिए। यह आम तौर पर किया जाएगा \nया \r\n


आपको इसे मूल चर में वापस बदलने की आवश्यकता है क्योंकि प्रतिस्थापन जगह में नहीं होता है।
tvanfosson

@driss मैं जानना चाहूंगा कि आप एक नई लाइन को कैसे उठाएंगे, जब आपको पता ही नहीं होगा कि फाइल किस सिस्टम से आई है ... यह समाधान वास्तव में UNIVERSAL लगता है।
कैलिफ

14

यह मत भूलो कि प्रतिस्थापन स्ट्रिंग में प्रतिस्थापन नहीं करता है, लेकिन प्रतिस्थापित पात्रों के साथ एक नया स्ट्रिंग लौटाता है। निम्नलिखित लाइन ब्रेक को हटा देगा (उन्हें प्रतिस्थापित नहीं करेगा)। मैं @ ब्रायन आर। बॉन्डी की विधि का उपयोग करता, अगर उन्हें किसी और चीज़ से बदल दिया जाता, तो शायद एक विस्तार विधि के रूप में लिपटा जाता। कॉल करने से पहले सबसे पहले अशक्त मानों की जांच करना या प्रदान की गई विस्तार विधियों को याद रखें।

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'इसके बजाय काम करेंगे ?
श्वेक

1
@ शेवेक - बस गलत उद्धरण का उपयोग किया। जिस दिन मैंने इसका उत्तर दिया, उस दिन बहुत अच्छी तरह से जावास्क्रिप्ट किया गया होगा।
तवान्फोसन

@ कैलीफ - यह बराबर है, बेहतर नहीं है।
तवान्फोसन

2
यहां आपके द्वारा की गई गलती सिर्फ इसे बेहतर साबित करती है। मैंने जिन कंपनियों के लिए काम किया है, उनके लिए यह कोडिंग मानक है - नॉट हार्डवर्केड लाइटर।
कैलिफ

2
@ मुझे जो "गलती" मिली, उसे Intellisense के साथ IDE में नहीं बनाया गया और न ही इसे संकलित किया गया। यदि आपको लगता है कि string.Emptyबेहतर है, हर तरह से इसका उपयोग करें।
tvanfosson

10

यह सुनिश्चित करने के लिए कि लाइन ब्रेक के सभी संभावित तरीके (विंडोज, मैक और यूनिक्स) को प्रतिस्थापित किया जाए, आपको इसका उपयोग करना चाहिए:

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');

और इस क्रम में, अतिरिक्त लाइन ब्रेक नहीं बनाने के लिए, जब आप लाइन को समाप्त करने वाले चार्ट के कुछ संयोजन पाते हैं।


8

यदि आप नई लाइनों को "क्लीन" करना चाहते हैं, तो रेगेक्स का उपयोग करते हुए फ्लेमबॉड टिप्पणी @"[\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
  }
}

अधिकांश मामलों के लिए, नई लाइनों को बदलने का सबसे अच्छा उत्तर।
शहबाज अहमद

इस उपयोगी नमूना कोड के लिए धन्यवाद। मैं इस sytnax के माध्यम से तय किया गया था: Regex.Replace (str, @ "[\ r \ n] +", "-")
Sedat Kumcu

6

मुझे \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;
}

6

क्यों न दोनों?

string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);

नोट:strin अपने इनपुट स्ट्रिंग के नाम से बदलें ।



2

.Replace () विधि का उपयोग करें

Line.Replace("\n", "whatever you want to replace with");

2

लाइनब्रेक को सुरक्षित रूप से बदलने का सबसे अच्छा तरीका है

yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n")             //handling mac linebreaks

कि लाइनब्रेक के रूप में only \ n (जैसे लाइनफीड) के साथ एक स्ट्रिंग का उत्पादन करना चाहिए। यह कोड मिश्रित लाइनब्रेक को भी ठीक करने के लिए उपयोगी है।


2

के रूप में नई लाइन द्वारा सीमांकित किया जा सकता है \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");
}

0
string s = Regex.Replace(source_string, "\n", "\r\n");

या

string s = Regex.Replace(source_string, "\r\n", "\n");

निर्भर करता है कि आप किस रास्ते पर जाना चाहते हैं।

यह मदद करता है उम्मीद है।


0

एक और विकल्प यह है StringReaderकि विचाराधीन स्ट्रिंग का निर्माण किया जाए। पाठक पर, .ReadLine()एक पाश में करते हैं। फिर आपके पास अलग-अलग लाइनें हैं, इससे कोई फर्क नहीं पड़ता कि उनके पास क्या (लगातार या असंगत) विभाजक थे। उस के साथ, आप अपनी इच्छानुसार आगे बढ़ सकते हैं; एक संभावना एक का उपयोग करने StringBuilderऔर .AppendLineउस पर कॉल करने के लिए है।

लाभ यह है, आप रूपरेखा तय करते हैं कि "लाइन ब्रेक" क्या है।


0

यदि आप केवल नई लाइनों को बदलना चाहते हैं:

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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.