জাভার ফর্ম্যাট স্ট্রিংগুলিতে Unders বোঝা


84
 StringBuilder sb = new StringBuilder();
 // Send all output to the Appendable object sb
 Formatter formatter = new Formatter(sb, Locale.US);

 // Explicit argument indices may be used to re-order output.
 formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
 // -> " d  c  b  a"

এই ক্ষেত্রে, 2 জন কেন $ এ যুক্ত হয়?

উত্তর:


134

এর 2সাথে কোনও সম্পর্ক নেই $:

  • %     = ফর্ম্যাট স্ট্রিং শুরু
  • 4$   = চতুর্থ যুক্তি ('ডি')
  • 2     = দুটি প্রস্থ (ডান-প্রান্তিক)
  • s     স্ট্রিং এর = টাইপ

সত্যিই খাস্তা ব্যাখ্যা ধন্যবাদ। যাইহোক, যখন আমি% 4 $ 2s ব্যবহার করি এবং আমার যুক্তির মান 'ABCDEFGH' হয় এটি কেবলমাত্র 2 টি অক্ষর উদ্ধার করে না। এটি সম্পূর্ণ স্ট্রিং পুনরুদ্ধার করে। কেন?
kandarp

49

2$মানে এখানে তালিকা থেকে দ্বিতীয় যুক্তি দিলেন। $ অনুসরণ একটি সংখ্যা তাই না পূর্বে। একইভাবে, 4$মানে এখানে আর্গুমেন্ট রাখা।

স্পষ্ট করার জন্য, আমরা %2$2sফর্ম্যাটটি এর অংশগুলিতে বিভক্ত করতে পারি :

  • % - এটি একটি ফর্ম্যাট স্ট্রিং ইঙ্গিত করে

  • 2$ - এখানে দ্বিতীয় মান যুক্তি প্রদর্শন করা উচিত

  • 2 - ফর্ম্যাটটি দুটি অক্ষর দীর্ঘ

  • s - মানটিকে স্ট্রিং হিসাবে ফর্ম্যাট করুন

আপনি ডকুমেন্টেশনে আরও তথ্য পেতে পারেন ।


এটি আসলে হ্রাস করা হয়েছিল, যখন এটি একটি ভুল উত্তর ছিল। এটি এখন যেমন সঠিক, ডাউনভোট সরানো হয়েছে।
সোভেন লিলিয়েনথাল

4
@ সোভেন - উত্তরটি কখনই পরিবর্তন হয়নি, আমি মনে করি আপনি এটি অবশ্যই ভুল পড়েছেন। আমি কোনও লিখিত সামগ্রী যোগ করেছি কিন্তু পরিবর্তন করি নি।
ডেভ ওয়েব

ঠিক আছে, যখন আমি এটিকে অবনমিত করেছিলাম: "2 $ মানে এখানে তালিকা থেকে দ্বিতীয় যুক্তিটি রেখে দিন" " এটিই আমি সঠিক উত্তর হিসাবে গণনা করব না।
সোভেন লিলিয়েনথাল

এটি এখনও ঠিক এখন বলেছে এবং আপনি এখন এটি সঠিক বলেছেন।
ডেভ ওয়েব

নিজেই, এটি ভুল বা কমপক্ষে প্রশ্নের উত্তর না দিয়ে, তবে প্রসঙ্গে বলা হয়েছে, এটি ঠিক।
সোভেন লিলিয়েনথাল

4

এগুলি স্থিতিযুক্ত আর্গুমেন্ট যেখানে চতুর্থ আর্গুমেন্টটিকে প্রস্থ 2 দিয়ে স্ট্রিম হিসাবে %4$2sফর্ম্যাট করার সিগন্যালগুলি স্থানীয়করণের জন্য স্ট্রিং সরবরাহ করার ক্ষেত্রে বিশেষত সহায়ক যেখানে উত্স কোডটি স্পর্শ না করে যুক্তিগুলি পুনরায় সাজানো দরকার।

তারিখ এবং সময় উপস্থাপন করতে ব্যবহৃত হয় এমন ধরণের ফরমেট স্পেসিফায়ারগুলিতে নিম্নলিখিত বাক্য গঠন রয়েছে:

%[argument_index$][flags][width]conversion

ঐচ্ছিক argument_indexযুক্তি তালিকায় যুক্তি অবস্থান ইঙ্গিত পূর্ণসংখ্যা একটি দশমিক হয়। প্রথম যুক্তি দ্বারা রেফারেন্স করা হয় "1$", দ্বিতীয় দ্বারা "2$"ইত্যাদি ইত্যাদি - ফর্ম্যাটর ডকুমেন্টেশন


তবুও, আমি .NET এর ফর্ম্যাট স্ট্রিংগুলি বেশি পছন্দ করি কারণ তারা যুক্তির অবস্থানকে আরও পরিষ্কার করে।
জোয়

4

%: ফর্ম্যাট স্ট্রিং

4$: চতুর্থ মান আর্গুমেন্ট

2: প্রস্থ (যুক্তি মুদ্রণের সময় দৈর্ঘ্য)

s: এটি একটি স্ট্রিং আর্গুমেন্ট রূপান্তর

উদাহরণস্বরূপ, নিম্নলিখিত স্নিপেট:

StringBuffer sb=new StringBuffer();

Formatter formatter=new Formatter(sb,Locale.UK);

formatter.format("-%4$5s-%3$5s-%2$5s-%1$5s-", "a", "b", "c", "d");

System.out.println(sb);

এর একটি আউটপুট উত্পাদন করে:

-    d-    c-    b-    a-

(আর্গুমেন্টে 5 টি অক্ষরের প্রস্থ, স্পেস সহ প্যাড করা)

এবং প্রতিস্থাপন 5সঙ্গে 2, নিম্নলিখিত বার্তা উত্পাদন করা হবে:

- d- c- b- a-

পার্থক্যটা দেখ? :)

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