আক্ষরিক স্ট্রিংয়ে কীভাবে নিউলাইন সন্নিবেশ করা যায়?


155

.NET এ আমি উভয় \rবা \nস্ট্রিং লিটারেল সরবরাহ করতে পারি , তবে Environment.NewLineস্ট্যাটিক সম্পত্তির মতো "নতুন লাইন" বিশেষ চরিত্রের মতো কিছু সন্নিবেশ করার একটি উপায় আছে ?


9
প্রশ্নটা কি?
আইবুরলকভ

উত্তর:


319

ভাল, সহজ বিকল্পগুলি হ'ল:

  • string.Format:

    string x = string.Format("first line{0}second line", Environment.NewLine);
  • স্ট্রিং সংযোগ:

    string x = "first line" + Environment.NewLine + "second line";
  • স্ট্রিং অন্তরঙ্গকরণ (সি # 6 এবং উপরে):

    string x = $"first line{Environment.NewLine}second line";

আপনি যে কোনও জায়গায় \ n ব্যবহার করতে পারেন এবং প্রতিস্থাপন করতে পারেন:

string x = "first line\nsecond line\nthird line".Replace("\n",
                                                         Environment.NewLine);

নোট করুন যে আপনি এটিকে একটি স্ট্রিংকে ধ্রুবক করতে পারবেন না , কারণ এর মানটি Environment.NewLineকেবলমাত্র মৃত্যুর সময় কার্যকর হবে।


1
আচ্ছা, অবশ্যই ধন্যবাদ তবে আমি বলতে চাইছি এনভায়রনমেন্ট ব্যবহার করা এড়ানো e নিউলাইন, আমার প্রশ্ন ছিল যদি সেখানে '/ নিউলাইন' আক্ষরিক হয় কিনা।
ক্যাপ্টেন কমিক

2
@ ক্যাপিন: আপনি এড়াতে চান কেন Environment.NewLine? একেবারে বিপরীতে, এটি ব্যবহার করা ভাল অভ্যাস
অ্যাব্যাটিচেভ

18
@ বাতিশচেভ: কিছু জায়গায় এটি ভাল অনুশীলন। আমার অন্যদের মধ্যে এটি না। আপনার সত্যিই এটি জানতে হবে যে আপনি প্ল্যাটফর্ম-নির্দিষ্টটি ব্যবহার করতে চান। উদাহরণস্বরূপ, এটি নয় একটি ভাল ধারণা আপনি একটি নেটওয়ার্ক প্রোটোকল যা লাইন terminators নিজেই সংজ্ঞায়িত করা উচিত ব্যবহার করছেন পারেন।
জন স্কিটি

1
কমিক @Captain: আমার চূড়ান্ত বাক্য ব্যাখ্যা দিয়েছে কেন এটি একটি আক্ষরিক পালাবার হতে পারে না - আপনি একটি স্ট্রিং ধ্রুবক জন্য মেটাডাটা অন্তর্ভুক্ত করতে পারবেন না কারণ এটা না একটি ধ্রুবক মান।
জন স্কিটি

1
হ্যাঁ, আমি উভয় বিকল্পের জন্য অনিচ্ছুক কারণ হতে পেরেছি: একটি প্লাস অপারেটর ব্যবহার করে এবং দ্বিতীয়টি বিন্যাস পদ্ধতিটি ব্যবহার করা বেশ ওভারহেড যেখানে '\ নিউলাইন' আক্ষরিকতর ইনজেকশনটি সবচেয়ে দ্রুততম উপায় হবে। তবে জোন যেমন বলেছিলেন নিউলাইন আক্ষরিক থাকলে তা গতিশীল এবং প্ল্যাটফর্ম নির্ভর হতে হবে dependent
ক্যাপ্টেন কমিক

33

আপনি যদি একটি কনস্ট্রিং স্ট্রিং চান যাতে এতে পরিবেশ থাকে। নতুন লাইনে আপনি এই জাতীয় কিছু করতে পারেন:

const string stringWithNewLine =
@"first line
second line
third line";

সম্পাদনা

যেহেতু এটি একটি নিয়মিত স্ট্রিংয়ে এটি সংকলন সময়ে করা হয় তাই এটি একটি নতুন লাইনের সংকলকটির ব্যাখ্যা iler আমি এই আচরণটি ব্যাখ্যা করার মতো কোনও রেফারেন্স খুঁজে পাই না বলে মনে করি তবে, আমি প্রমাণ করতে পারি এটি এটি যেমন ইচ্ছা তেমন কাজ করে। আমি এই কোডটি উভয় উইন্ডোজ এবং উবুন্টুতে (মনোো সহ) সংকলিত করেছি তারপরে বিচ্ছিন্ন করে ফেললাম এবং এগুলি ফলাফল:

উইন্ডোজ থেকে বিচ্ছিন্ন করা উবুন্টুতে বিচ্ছিন্ন করা

আপনি দেখতে পাচ্ছেন, উইন্ডোজে নিউলাইনগুলি \ r \ n হিসাবে এবং উবুন্টুতে \ n হিসাবে ব্যাখ্যা করা হয়


1
সংকলকটি স্বয়ংক্রিয়ভাবে পাঠ্যের প্রতিটি লাইনের মধ্যে একটি পরিবেশ। নিউলাইন যুক্ত করে। সুতরাং স্ট্রিংটির ব্যাখ্যা করা হয়েছে: "প্রথম লাইন" + পরিবেশগত.নুউলাইন + "দ্বিতীয় লাইন" + পরিবেশনা.নউইলাইন + "তৃতীয় লাইন"
তাল জেরোমে

3
স্ট্রিং লিটারালগুলিতে নিউলাইনগুলি সন্নিবেশ করানোর ছোট্ট পরিচিত উপায়। আপনি যে আচরণটি নির্দিষ্ট করেছেন তার কোনও রেফারেন্স আছে? এটি কি সত্যিই পরিবেশ.নিউলাইন বা এটি কোনও নতুন লাইনের সংকলক সংজ্ঞা?
হতাশার গ্র্যামেস

1
আপনি কি নিশ্চিত যে এটি কোড সম্পাদকের নতুন লাইনের চরিত্র নয় যা সেখানে ?োকানো হয়? যদি আপনি সেই কোডটি উইন্ডোজের কোনও সম্পাদককে অনুলিপি করেন তবে এটি সম্ভবত \ r \ n এ রূপান্তরিত হবে। ইউনিক্সের মতো প্ল্যাটফর্মেও এটি করুন এবং এটি সম্ভবত পরিবর্তে \ n এ রূপান্তরিত হবে।
জিয়াং

এটি দিয়ে নজর রাখুন। আপনি যদি সিআই / সিডি সার্ভারে (যেমন টিমসিটি, সার্ভার সাইড চেকআউট) কোড চেকআউট করেন তবে এটি সিআরএলএফকে এলএফতে পরিবর্তন করবে এবং স্ট্রিংয়ে নতুন লাইন থাকবে না।
লেসেক পি

13
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();

2
আপনি first + Environment.NewLine + secondযেটি আরও দক্ষ এবং (আইএমও) পড়া সহজ?
জন স্কিটি

@ জন: আরও দক্ষ, সত্যিই? আমি ভেবেছিলাম যে String.Formatএটি একবারে 1 টি স্ট্রিং তৈরি করবে (তবে এটি সংস্কৃতি নির্দিষ্ট কনটেন্টেশন ইত্যাদির কারণে এটি অভ্যন্তরীণভাবে কিছুটা ধীরে ধীরে), যখন স্ট্রিং কনটেন্টেশন - 1 ফলাফল + 1 অস্থায়ী, ঠিক?
abatishchev

1
@ বাতিষেভ: সংকলকটি আরআরআরআর + টিআরআরকে রূপান্তর করে String.Concatenate, যা সরাসরি মাত্র একটি আউটপুট স্ট্রিং তৈরি করে (আইআইআরসি, যদি স্ট্রিংগুলি আক্ষরিক হয় তবে সংকলকটিতে সংক্ষিপ্তকরণ করা হয়।
রিচার্ড

@ রিচার্ড: অর্থাত্ "a"+b+"c"+dপারফরম্যান্সের দ্বারা একাধিক তবে এক-লাইন স্ট্রিং কনকেনটেশন ( ইত্যাদি) এককটির সমান? বা ঠিক রূপান্তরিত String.Concatenate(a,b,c,d,etc), ডান?
abatishchev

@ বাতিশচেভ: সে কারণেই আমি string.Formatমন্তব্যে কোনও পরামর্শ দিইনি । স্ট্রিং কনটেনটেশন কোনও অস্থায়ী স্ট্রিং উত্পাদন করতে পারে না, কারণ সংকলক কল করবে string.Concat(first, Environment.NewLine, second)
জন স্কিটি

3

এনভায়রনমেন্টের সুবিধাজনক স্থাপনের আরও একটি উপায় format ফর্ম্যাট স্ট্রিংয়ে নিউলাইন। স্ট্রিং এক্সটেনশন পদ্ধতিটি তৈরি করা ধারণাটি যা স্ট্রিংকে যথারীতি ফর্ম্যাট করে তবে {nl text পাঠ্য এনভায়রনমেন্টের সাথে প্রতিস্থাপন করে। নিউলাইন

ব্যবহার

   " X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2);
   gives:
    X=1
    Y=2
    X+Y=3

কোড

    ///<summary>
    /// Use "string".FormatIt(...) instead of string.Format("string, ...)
    /// Use {nl} in text to insert Environment.NewLine 
    ///</summary>
    ///<exception cref="ArgumentNullException">If format is null</exception>
    [StringFormatMethod("format")]
    public static string FormatIt(this string format, params object[] args)
    {
        if (format == null) throw new ArgumentNullException("format");

        return string.Format(format.Replace("{nl}", Environment.NewLine), args);
    }

বিঃদ্রঃ

  1. আপনি যদি পুনঃশার্পারটি আপনার পরামিতিগুলি হাইলাইট করতে চান তবে উপরের পদ্ধতিতে অ্যাট্রিবিউট যুক্ত করুন

    [StringFormatMethod ( "বিন্যাস")]

  2. এই প্রয়োগটি কেবল স্ট্রিং.ফর্ম্যাটের চেয়ে স্পষ্টতই কম দক্ষ

  3. হতে পারে যে কেউ, এই প্রশ্নে আগ্রহী পরবর্তী প্রশ্নেও আগ্রহী হবে: সি # তে স্ট্রিং বিন্যাসকরণ


2
string myText =
    @"<div class=""firstLine""></div>
      <div class=""secondLine""></div>
      <div class=""thirdLine""></div>";

যে এটা না:

string myText =
@"<div class=\"firstLine\"></div>
  <div class=\"secondLine\"></div>
  <div class=\"thirdLine\"></div>";

1
static class MyClass
{
   public const string NewLine="\n";
}

string x = "first line" + MyClass.NewLine + "second line"

3
-1: সিস্টেমটি ইতিমধ্যে সংজ্ঞায়িত করেছে Environment.NewLine- অন্যান্য উত্তরগুলি দেখুন।
রিচার্ড

@ রিচার্ড: ওপি, যতদূর আমি তাকে বুঝতে const string
পেরেছি

@ রিচার্ড এনভায়রনমেন্ট.নিউলাইন স্থিতিশীল নয়

1

নতুন। নেট সংস্করণগুলি আপনাকে আক্ষরিকের সামনে ব্যবহার করতে দেয় যা আপনাকে নীচের মত ভেরিয়েবলগুলি ব্যবহার করতে দেয়:

var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";

1
কিছুটা প্রসঙ্গ খারাপ হবে না।
ক্রোক্সি


@ এইচ। পাউওলিন ツ: প্রতিক্রিয়াটির জন্য ধন্যবাদ x আমি কিছুটা প্রসঙ্গ যুক্ত করেছি। আমার দৃষ্টিকোণ থেকে সমাধানটি অবশ্যই প্রশ্নের উত্তর দেয়।
ড্যানিয়েলক

0

যদি আপনি সত্যিই একটি ধ্রুবক হিসাবে নতুন লাইন স্ট্রিং চান, তবে আপনি এটি করতে পারেন:

public readonly string myVar = Environment.NewLine;

সি # তে পঠনযোগ্য কী-ওয়ার্ডের ব্যবহারকারীর অর্থ এই চলকটি একবারে বরাদ্দ করা যেতে পারে। আপনি এখানে ডকুমেন্টেশন খুঁজে পেতে পারেন । এটি একটি ধ্রুবক ভেরিয়েবলের ঘোষণাকে মঞ্জুরি দেয় যার প্রয়োগের সময় পর্যন্ত তার মান জানা যায় না।


0

আমি আরও "পাইথোনিক উপায়" পছন্দ করি

List<string> lines = new List<string> {
    "line1",
    "line2",
    String.Format("{0} - {1} | {2}", 
        someVar,
        othervar, 
        thirdVar
    )
};

if(foo)
    lines.Add("line3");

return String.Join(Environment.NewLine, lines);

0

আপনি যদি ওয়েব অ্যাপ্লিকেশন নিয়ে কাজ করছেন তবে আপনি এটি চেষ্টা করতে পারেন।

StringBuilder sb = new StringBuilder();
sb.AppendLine("Some text with line one");
sb.AppendLine("Some mpre text with line two");
MyLabel.Text = sb.ToString().Replace(Environment.NewLine, "<br />")

0

যদি আমি প্রশ্নটি বুঝতে পারি: দম্পতিরা "\r\n"নীচে একটি নতুন লাইন পেতে textbox। আমার উদাহরণ কাজ করেছে -

   string s1 = comboBox1.Text;     // s1 is the variable assigned to box 1, etc.
   string s2 = comboBox2.Text;

   string both = s1 + "\r\n" + s2;
   textBox1.Text = both;

একটা প্রচলিত উত্তর হতে পারে s1 s2 মধ্যে text boxব্যবহার নির্ধারণ করা টাইপ শৈলী।


-1

এখানে, এনভায়রনমেন্ট.নউলাইন কাজ করে না।

আমি করা একটি " < বিআর / > " একটি স্ট্রিং এবং কাজ করেন।

উদা:

ltrYourLiteral.Text = "প্রথম লাইন। < বিআর / > দ্বিতীয় লাইন।";

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.