স্ট্রিং রিসোর্স ফাইলে ফর্ম্যাট স্টেটমেন্ট


147

আমার স্ট্রিংগুলি সাধারণ স্ট্রিংস। এক্সএমএল রিসোর্স ফাইলে এইভাবে সংজ্ঞায়িত করা হয়েছে:

<string name="hello_world"> HELLO</string>

নীচের মত ফর্ম্যাট স্ট্রিংগুলি সংজ্ঞায়িত করা কি সম্ভব?

 result_str = String.format("Amount: %.2f  for %d days ",  var1, var2);

স্ট্রিং.এক্সএমএল রিসোর্স ফাইলে?

আমি বিশেষ চরিত্রগুলি থেকে পালানোর চেষ্টা করেছি কিন্তু এটি কার্যকর নয়।


1
আপনি নীচের উপায়ে চেষ্টা করতে পারেন: এমটেক্সটভিউ.সেটটেক্সট (স্ট্রিং.ফর্ম্যাট ("স্কোর:" + "% 1 $ s", রান)); যেখানে int রান = 100;
গণেশ

উত্তর:


264

formatted="false"আপনার এক্সএমএল ব্যবহার করার দরকার নেই । - তুমি শুধু সম্পূর্ণরূপে যোগ্যতাসম্পন্ন স্ট্রিং বিন্যাস মার্কার ব্যবহার করতে হবে %[POSITION]$[TYPE](যেখানে [POSITION]অ্যাট্রিবিউট অবস্থান নেই এবং [TYPE]পরিবর্তনশীল ধরনের) উদাহরণস্বরূপ, বরং ছোট সংস্করণের তুলনায়, %sবা %d

অ্যান্ড্রয়েড ডক্স থেকে উদ্ধৃতি : স্ট্রিং বিন্যাস এবং স্টাইলিং :

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

এই উদাহরণে, ফর্ম্যাট স্ট্রিংয়ের দুটি আর্গুমেন্ট রয়েছে: %1$sএটি একটি স্ট্রিং এবং %2$dদশমিক পূর্ণসংখ্যা। আপনি আপনার অ্যাপ্লিকেশন থেকে যুক্তিগুলি দিয়ে স্ট্রিংটি ফর্ম্যাট করতে পারেন:

Resources res = getResources();
String text = res.getString(R.string.welcome_messages, username, mailCount);

1
আমি java.util.Illegal FormatConversionException পেয়েছি:% d java.lang কে ফর্ম্যাট করতে পারে না I d মনে করি think d একটি পূর্ণসংখ্যা হিসাবে ব্যবহার করা হয়
user1634451

6
এখানে বিভিন্ন রূপান্তরকারীগুলির একটির তালিকা রয়েছে, আপনাকে সংখ্যার ধরণের জন্য উপযুক্ত একটিটি বেছে
ইউজার

2
res.getString (আর। স্ট্রিং। ওয়েলভাম_মেসেজগুলি, ব্যবহারকারীর নাম, মেলকাউন্ট) কাজটি করবে। রিসোর্স / প্রসঙ্গে গেটস্ট্রিং পদ্ধতিতে বিন্যাস কার্যকারিতা অন্তর্ভুক্ত।
SkyOasis

104

formatted="false"আপনার স্ট্রিং রিসোর্সে যোগ করা উচিত


এখানে একটি উদাহরণ

আপনার strings.xml:

<string name="all" formatted="false">Amount: %.2f%n  for %d days</string>

আপনার কোডে:

yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));

6
বিন্যাসের স্ট্রিংয়ের জন্য ডক্স অনুসারে প্রয়োজনীয় নয়। বিকাশকারী.অ্যান্ড্রয়েড / গাইড
টপিক্স

এটি ঠিক করার এক উপায়, তবে কারও কাছে বিভ্রান্তিকর কারণ formatted="false"হতে পারে কারণ বোঝাতে পারে যে স্ট্রিংটি ফর্ম্যাট হয় না। অন্য সমাধান পোস্ট stackoverflow.com/a/20887690/228429
LocalPCGuy

18
মনে রাখবেন প্রক্রিয়া সহজ করতে String.format(getString(R.string.all), 3.12, 2)এই পথ: getString(R.string.all, 3.12, 2)
patryk.beza 15

এই পৃষ্ঠায় সমস্ত উত্তরগুলির সাথে একটি বড় সমস্যা রয়েছে: আপনার যদি কোনও প্যারামের ঠিক পরে শতাংশের চিহ্ন যুক্ত করতে হয় তবে বলুন 25%, অ্যান্ড্রয়েড ক্রাশ হবে।
হেনরিক ডি সোসা

2
আপনি দুই %% অন্তর্ভুক্ত করে শতাংশ চিহ্ন থেকে বাঁচতে পারবেন। নিম্নলিখিত মানক বিন্যাস সিনট্যাক্স। উদাহরণ: স্ট্রিং.ফর্ম্যাট ("শতাংশ% d %% বা ভাসমান% .2f %% হিসাবে", 12, 12.34f); একটি স্ট্রিং "শতাংশ 12% বা float হিসাবে 12,34%" উত্পন্ন করবে
LanDenLabs

14

ফাইলের অভ্যন্তরে strings.xmlএকটি স্ট্রিং রিসোর্স এর মতো সংজ্ঞায়িত করুন:

<string name="string_to_format">Amount: %1$f  for %2$d days%3$s</string>

আপনার কোডের অভ্যন্তরে (অনুমানের মাধ্যমে এটি উত্তরাধিকার সূত্রে গ্রহন করুন) কেবল নিম্নলিখিতটি করুন:

 String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);

( লোকালপিসিগুয়ে বা জিওভানি ফার্টো এম। এর উত্তরের তুলনায় স্ট্রিং . ফর্ম্যাট পদ্ধতির প্রয়োজন নেই))


9

অ্যান্ড্রয়েড ডক্সের উদ্ধৃতি :

যদি আপনার স্ট্রিংগুলি ব্যবহার করে বিন্যাস String.format(String, Object...)করতে হয় তবে স্ট্রিং রিসোর্সে আপনার ফর্ম্যাট আর্গুমেন্টগুলি রেখে আপনি এটি করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত উত্স সহ:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

এই উদাহরণে, ফর্ম্যাট স্ট্রিংয়ের দুটি আর্গুমেন্ট রয়েছে: %1$sএটি একটি স্ট্রিং এবং %2$dদশমিক সংখ্যা। আপনি আপনার অ্যাপ্লিকেশন থেকে যুক্তিগুলি দিয়ে স্ট্রিংটি ফর্ম্যাট করতে পারেন:

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

0

আমার জন্য এটি কোটলিনে সেভাবে কাজ করেছিল:

আমার স্ট্রিং। xml

 <string name="price" formatted="false">Price:U$ %.2f%n</string>

আমার ক্লাস। কেটি

 var formatPrice: CharSequence? = null
 var unitPrice = 9990
 formatPrice = String.format(context.getString(R.string.price), unitPrice/100.0)
 Log.d("Double_CharSequence", "$formatPrice")

ডি / ডাবল_চার্জ সিকোয়েন্স: মূল্য: $ 99,90

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