আমি কীভাবে প্ল্যাটফর্ম নির্ভর নতুন লাইনের চরিত্র পেতে পারি?


542

আমি কীভাবে জাভাতে প্ল্যাটফর্ম নির্ভর নিউলাইন পাব? আমি "\n"কোথাও ব্যবহার করতে পারি না ।


গৃহীত উত্তরগুলি পরিবর্তন করে বিবেচনা করুন। ২ য় উত্তরটি আরও উপযুক্ত।
ধূসর

উত্তর:


363

লাইন.সেপারেটর সম্পত্তি ছাড়াও, আপনি যদি জাভা 1.5 বা তার বেশি ব্যবহার করছেন এবং স্ট্রিং.ফর্ম্যাট (বা অন্যান্য ফর্ম্যাটিং পদ্ধতি) আপনি %nহিসাবে ব্যবহার করতে পারেন

Calendar c = ...;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY%n", c); 
//Note `%n` at end of line                                  ^^

String s2 = String.format("Use %%n as a platform independent newline.%n"); 
//         %% becomes %        ^^
//                                        and `%n` becomes newline   ^^

দেখুন ফরম্যাটার জন্য জাভা 1.8 এপিআই আরো বিস্তারিত জানার জন্য।


7
ধন্যবাদ! আমি নিশ্চিত System.getProperty ("line.separator"); এর ব্যবহার রয়েছে, তবে আমি দেখে ক্লান্ত হয়ে পড়েছি: "লাইন 1" + সিস্টেম.getProperty ("line.separator") + "লাইন 2"
বোতামস 840

43
ওহ আমার, "লাইন 1" + সিস্টেম.getProperty ("line.separator") + "লাইন 2" সত্যিই আমি দেখেছি যে কুরুচিপূর্ণ জিনিস। অন্য কোথাও ধ্রুবক ঘোষণা করা কম বেদনাদায়ক হবে।
আবাহগাত

4
এটি একটি লগ 4 জে স্টেটমেন্টে স্ট্রিং সহ কমপক্ষে কাজ করে না। শেষে একটি নতুন লাইন দিয়ে উদাহরণ তৈরি করা সম্ভাব্য সমস্যাটি আড়াল করছে। এছাড়াও, স্ট্রিং এস 2 '%% n' ব্যবহার করে কেবল বিভ্রান্ত করছে
স্টিলথ রাব্বি

6
আপনার স্ট্রিং %ব্যবহারকারীর ইনপুট থেকে থাকতে পারে এটি ব্যবহার করবেন না !
কনস্ট্যান্টিন ওয়েটিজ

8
@ কনস্টান্টিন ওয়েইটস, এর সমস্যাটি String.format(s + "%n")সহজেই সমাধান করা হবে String.format("%s%n", s)। এটি সর্বদা ফর্ম্যাট বডি হিসাবে ব্যবহারকারী ইনপুটকে জড়িত করা ঝুঁকিপূর্ণ (একইভাবে eval())।
ফ্র্যাঙ্কলিন ইউ

709

জাভা 7 এর এখন একটি System.lineSeparator()পদ্ধতি রয়েছে।


8
তাদের একটি ওভারলোডেড পদ্ধতি প্রদান করা খুব ভাল lineSeperator(int)লাগত যা কিছু সংখ্যক লাইন সেপারেটর প্রদান করে, কারণ আমি প্রায়শই নিজেকে একবারে 2 ব্যবহার করে দেখতে পাই find
কন

10
@ উত্তর এই উত্তরের উপর ভিত্তি করে :String.join("", Collections.nCopies(5, System.lineSeparator()))
স্যামুয়েল হারমার

4
জাভা 11 সহ:System.lineSeparator().repeat(5)
জ্যাকব জি।

4
@ জ্যাকবজি গ্লোটিং বন্ধ করুন .. আমাদের মধ্যে কয়েকজন এখনও জাভা 7. এ আটকে আছে
অ্যান্ড্রু টি ফিনেল

@ অ্যান্ড্রুটিফিনেল আমি আরও একটি ভাল চাকরি খুঁজে পাব <:- পি কোনও ধারক নেই -> জাভা 11 নয়, তাই আপনি আরও ভাল বেতনের জন্য অবস্থান করছেন, আমরা গ্ল্যাট করতে পারি :
আবার্গিন

649

তুমি ব্যবহার করতে পার

System.getProperty("line.separator");

লাইন বিভাজক পেতে


4
জাভা 7 টি System.lineSeparator()বিশদ যুক্ত করার জন্য যত্নশীল তাই এখানে এই প্রশ্নের একটি নির্দিষ্ট উত্তর?
ধূসর


31

এটাও সম্ভব: String.format("%n")

বা String.format("%n").intern()কিছু বাইট সংরক্ষণ করতে।


7
এটি অ্যালেক্স বি এর উত্তর হিসাবে একই।
Spoike

16
ওহ এখন আমি এটি দেখতে। তিনি তার উত্তরের চারপাশে এতগুলি আনসকৃত জিনিস লিখেছিলেন। ;-)
সিলিং

আমি এটি করার চেষ্টা করেছি কিন্তু আমি যখন নোটপ্যাডে ফাইলটি দেখি তখন এটি নতুনলাইনটি স্বীকৃতি দেয় না।
এমআর 5

1
@ এমআর notepad5 কোনও ফাইলের বিষয়বস্তু দেখার সঠিক সরঞ্জাম নয়। ব্যবহার করুন hexdumpবা od
সিলিং

@ceving আমি উইন্ডোজ পরিবেশ উপর আছি এবং আমি আশা করেছিলাম সম্পর্কে newline সমন্বয় হবে\r\n
mr5

22

Commons-ল্যাঙ গ্রন্থাগার প্রাপ্তিসাধ্য একটি ধ্রুবক ক্ষেত্র বলা SystemUtils.LINE_SEPARATOR


19
হ্যাঁ, কেবল প্ল্যাটফর্মের স্বতন্ত্র নতুন লাইনের জন্য একটি তৃতীয় পক্ষের লাইব্রেরি ইনস্টল করুন! # পৃষ্ঠপত্র
শেরভিন

23
@ শেরভিন অবশ্যই আপনি তা করবেন না, তবে অনেক প্রকল্পে আমি ইতিমধ্যে কমন্স-ল্যাং এবং জাভার কিছু পুরানো সংস্করণ ব্যবহার করছি। সুতরাং যদি আপনি ইতিমধ্যে কমন্স-ল্যাং ব্যবহার করছেন বলে মনে হয় তবে এটি একটি বোধগম্য উত্তর। আমি এটি উল্লেখ করা প্রয়োজন মনে করি না, আমি স্পষ্টতই ভুল ছিলাম।
লেসিক্লস্কোপ

2
প্রকল্পগুলির জন্য এটি ইতিমধ্যে একটি ভাল পরামর্শ যা ইতিমধ্যে এই লাইব্রেরিটি ব্যবহার করছে, ধন্যবাদ!
অ্যালেক্সিস লেকার্ক

13
StringBuilder newLine=new StringBuilder();
newLine.append("abc");
newline.append(System.getProperty("line.separator"));
newline.append("def");
String output=newline.toString();

উপরের স্নিপেটে প্ল্যাটফর্ম নির্বিশেষে একটি নতুন লাইনের দ্বারা দুটি স্ট্রিং আলাদা থাকবে।


13

আপনি যদি কোনও ফাইলটিতে লিখছেন, BufferedWriterউদাহরণ ব্যবহার করে newLine(), সেই উদাহরণটির পদ্ধতিটি ব্যবহার করুন । এটি কোনও ফাইলে নতুন লাইনটি লেখার প্ল্যাটফর্ম-স্বতন্ত্র উপায় সরবরাহ করে।



-3

স্ট্রিং + স্ট্রিং ইত্যাদি ব্যবহার করে স্ট্রিং যুক্ত করা এড়িয়ে চলুন, পরিবর্তে স্ট্রিংবিল্ডার ব্যবহার করুন।

String separator = System.getProperty( "line.separator" );
StringBuilder lines = new StringBuilder( line1 );
lines.append( separator );
lines.append( line2 );
lines.append( separator );
String result = lines.toString( );

20
এটি আসলে বেশিরভাগ ক্ষেত্রেই কিছু যায় আসে না, কোডিং হরারের জেফ আতউড এই বিশেষ ধরণের মাইক্রো-অপটিমাইজেশন সম্পর্কে একটি ব্লগ পোস্ট করেছিলেন । "করবেন না" এর মতো দাবি করার আগে সর্বদা মেট্রিক করুন string + string
Spoike

6
আমি বলব যে জেফের নিবন্ধটি কিছুটা বন্ধ হতে পারে কারণ এটি কেবল মৃত্যুদন্ডের সময় স্পর্শ করে। জাভাতে স্ট্রিং কনটেনটেশন কেবল মৃত্যুদন্ড কার্যকর করার গতি সম্পর্কে নয় এটি জিসি পরিষ্কার করার জন্য আপনি মেমরিতে কতটা আবর্জনা ফেলে রেখেছেন, যার ফলে জিসি প্রায়শই চলতে পারে। এটি আপনার পরিবেশ এবং কনফিগারেশনের উপর নির্ভর করে সমস্যা হতে পারে এবং নাও হতে পারে।
লাজিক

7
ল্যাজিক, আমি সন্দেহ করি যে সত্যিকার অর্থে প্রচুর স্ট্রিং ম্যানিপুলেশন করে এমন ব্যক্তিরা ব্যতীত সকল ক্ষেত্রেই এটি প্রাক-অপ্টিমাইজেশন। স্ট্রিংবুফার একটি ছোটখাটো কনটেন্টেশন প্রয়োজনীয়তার জন্য একটি অ্যান্টি-প্যাটার্ন। বেশিরভাগ ক্ষেত্রে আমি উপরে বর্ণিত মাল্টি-লাইনের উদাহরণের চেয়ে স্ট্রিং 1 + বিভাজক + স্ট্রিং 2 পাব। এছাড়াও, আমি এসবি যুক্ত করে মেমরি এবং জিসিকে ইতিবাচকভাবে প্রভাবিত করে কিনা তা পরীক্ষার পরামর্শ দেব। অনেক ক্ষেত্রে আমি অনুমান করব যে এটি তা নয়। যদি এটি পরীক্ষার উপযুক্ত না হয় তবে এটি সম্ভবত প্রাক-অপ্টিমাইজ করা এবং আমি পঠনযোগ্যতার উপর ফোকাস করব।
রিচার্ড ওয়াটসন

31
স্ট্রিং 1 + স্ট্রিং 2 করা আধুনিক সংকলকগুলিতে নতুন স্ট্রিংবিল্ডার (স্ট্রিং 1)। অ্যাপেন্ড (স্ট্রিং 2) করার মতোই, সুতরাং একটি লাইনারের স্ট্রিং কনক্টের জন্য কোনও অপ্টিমাইজেশন নেই। স্ট্রিংবিল্ডারটি কেবল লুপ বা পুনরাবৃত্ত পদ্ধতিতে উত্পন্নভাবে মূল্যবান। তবে যাইহোক, এটি মূল প্রশ্নের ক্ষেত্রের বাইরে থাকতে পারে।
ব্যবহারকারী 327961

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