জাভা - স্ট্রিংয়ের মধ্যে ভেরিয়েবলগুলি সহ?


114

ঠিক আছে, সুতরাং আমাদের সবার জানা উচিত যে আপনি স্ট্রিংগুলিতে ভেরিয়েবলগুলি অন্তর্ভুক্ত করতে পারেন:

String string = "A string " + aVariable;

এটি করার মতো কোনও উপায় আছে:

String string = "A string {aVariable}";

অন্য কথায়: উদ্ধৃতি চিহ্নগুলি বন্ধ না করে এবং যোগ চিহ্নগুলি যুক্ত না করে। এটা খুব অপ্রয়োজনীয়।


10
@ চন্দ্র দয়া করে কেন জিজ্ঞাসা করবেন না, তবে সম্ভব হলে ব্যাখ্যা করুন। এটি ঠিক কীভাবে আমি এটি করতে পছন্দ করি। ধন্যবাদ।
গ্রে অ্যাডামস

3
গ্রোভি ব্যবহার করুন, তারপরে আপনি যা চান তা "একটি স্ট্রিং V Vএভেরিয়েবল}" করতে সক্ষম হবেন।
কালেব ব্রাসি

2
এই প্রশ্নে আলোচিত অনুরূপ জিনিসের জন্য বিভিন্ন কৌশল রয়েছে , তবে String.format()এটি অন্তর্নিহিত ভাষায়।
ig0774

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

1
@ গ্রেডাডামস গ্রোভি আপনাকে পিছনে সরিয়ে দেয় না, এটি আপনাকে নিখরচায় সেট করে! : ডি
কালেব ব্রাসি

উত্তর:


123

আপনি সর্বদা স্ট্রিং.ফর্ম্যাট (....) ব্যবহার করতে পারেন। অর্থাত,

String string = String.format("A String %s %2d", aStringVar, anIntVar);

এটি আপনার পক্ষে যথেষ্ট আকর্ষণীয় কিনা তা আমি নিশ্চিত নই, তবে এটি বেশ কার্যকর হতে পারে। সিনট্যাক্সটি প্রিন্টফ এবং জাভা.ইটিল.ফর্মেটর হিসাবে একই। আমি এটি ব্যবহার করেছি বিশেষত যদি আমি সারণী সংখ্যাসূচক তথ্য প্রদর্শন করতে চাই।


2
আমি জানি এটি একটি মতামত, তবে আমি দেখতে পাচ্ছি না যে formatএকটি সহজ স্ট্রিং কনটেন্টেশন অভিব্যক্তিটির চেয়ে আরও আকর্ষণীয়। কোথায় formatযখন আপনি প্যাডিং, সংখ্যা বিন্যাস, ইত্যাদি যা করতে হবে তার নিজস্ব আসে হয়।
স্টিফেন সি

1
@ স্টেফেনসি: আমি আপনার সাথে মোটেই একমত নই। তবে স্ট্রিং ফর্ম্যাটিংয়ের জন্য এটি দরকারী বিকল্প, বিশেষত যখন আপনি যেমন বলছেন তেমন প্যাডিং করা প্রয়োজন এবং আমি উপরে যেমন বলেছি (যেমন, সারণী সংখ্যাসূচক ডেটা দেখানোর জন্য)। আমি রক্তের রসায়ন এবং সিবিসি ফলাফলের প্রতিবেদনগুলির বিন্যাসের জন্য এটি বেশ খানিকটা ব্যবহার করেছি।
ইওলস

@ স্টেফেনসি আমি কয়েকটি কারণে ফর্ম্যাট পছন্দ করি: প্রথমত, '% d' প্ল্যাটফর্ম লাইন ডিলিমিটার ব্যবহার করে। দ্বিতীয়ত, আপনি সহজেই শেষে সমস্ত ভেরিয়েবলগুলি খুঁজে পেতে পারেন। আপনি ভেরিয়েবলগুলি সহজেই পুনরায় ফর্ম্যাট করতে বা পুনরায় অর্ডার করতে পারেন input ভুলগুলি এড়ানো (যেমন 1 + "oops") এড়ানো সহজ , বিশেষত আপনি যদি ফাইন্ডব্যাগগুলি ব্যবহার করেন (যা ফর্ম্যাট স্ট্রিং এবং ইনপুট পরামিতিকে পার্স করে)। এবং, যেমন প্রশ্নকারী বলেছেন, অনেক ক্ষেত্রে এটি বেশি পঠনযোগ্য। অবশ্যই, এটি একটি লজ্জার বিষয় যে formatপদ্ধতিটি অচল করে দেওয়া হয়েছে, এটি ছিল একটি বোকামি ডিজাইনের ভুল।
মার্টেন বোদেউয়েস

@ আওলস্টেড - "অবশ্যই এটি লজ্জার বিষয় যে ফর্ম্যাট পদ্ধতিটি অচল করে দেওয়া হয়েছে, এটি ছিল একটি বোকা নকশার ভুল।" । তাই না? formatলক্ষ্য স্ট্রিংয়ের সাথে কীভাবে সম্পর্কিত? নিশ্চয় আপনি পরামর্শ দিচ্ছেন না যে আমাদের লেখার প্রত্যাশা করা উচিত "A String %s %2d".format(aStringVar, anIntVar)... আপনি নাকি?
স্টিফেন সি

1
@ আওলস্টেড - "আসফর্ম্যাট" ঠিক হবে না। এটি সূচিত করে যে পদ্ধতিটি একটি ফর্ম্যাট অবজেক্ট তৈরি করে এবং ফিরে আসছে।
স্টিফেন সি

70

একে স্ট্রিং ইন্টারপোলেশন বলে; এটি জাভা যেমন বিদ্যমান না।

একটি পদ্ধতির স্ট্রিং.ফর্ম্যাট ব্যবহার করা:

String string = String.format("A string %s", aVariable);

আরেকটি পন্থা যেমন একটি টেমপ্লেট লাইব্রেরি ব্যবহার করা হয় বেগ বা FreeMarker


38

এছাড়াও বিবেচনা করুন java.text.MessageFormat, যা সংখ্যার যুক্তি সূচকগুলি সম্পর্কিত কোনও সিনট্যাক্স ব্যবহার করে। উদাহরণ স্বরূপ,

String aVariable = "of ponies";
String string = MessageFormat.format("A string {0}.", aVariable);

stringনিম্নলিখিতগুলি ধারণ করে ফলাফল :

A string of ponies.

আরও সাধারণভাবে, বর্গটি তার সংখ্যাসূচক এবং অস্থায়ী বিন্যাসের জন্য ব্যবহৃত হয়। JFreeChartলেবেল বিন্যাসের উদাহরণ এখানে বর্ণিত হয়েছে ; শ্রেণি RCInfoএকটি গেমের স্থিতি ফলকে ফর্ম্যাট করে।


1
সিশার্প থেকে আসা কারও পক্ষে এই পদ্ধতিটি আরও সোজা কারণ এটি স্ট্রিংয়ের অনুরূপ C সি # তে ফর্ম্যাট।
মোজতাবা

0

আপনি স্ট্রিংয়ের মধ্যে পরিবর্তনশীল অন্তর্ভুক্ত করতে স্ট্রিং ফর্ম্যাট ব্যবহার করতে পারেন

আমি স্ট্রিংয়ে 2 ভেরিয়েবল অন্তর্ভুক্ত করতে এই কোডটি ব্যবহার করি:

স্ট্রিং মাইস্ট্রিং = স্ট্রিং.ফর্ম্যাট ("এটি আমার স্ট্রিং% s% 2d", ভেরিয়েবল 1 নাম, ভেরিয়েবল 2 নাম);

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