প্রান্তিককরণের জন্য শীর্ষস্থানীয় শূন্যগুলির সাথে একটি প্রদত্ত দৈর্ঘ্যের একটি স্ট্রিং-এ কীভাবে একটি ইন্টারে রূপান্তর করবেন?


99

কীভাবে আমি Intএকটি 7-অক্ষর দীর্ঘকে রূপান্তর করতে পারি String, যাতে এটি 123রূপান্তরিত হয় "0000123"?

উত্তর:


226

জাভা লাইব্রেরিতে স্ট্রিংওপস সমৃদ্ধ স্ট্রিং ক্লাস থেকে অ্যাক্সেসযোগ্য সংখ্যার ফর্ম্যাটিং সমর্থনটি দুর্দান্ত (দুর্দান্ত হিসাবে) রয়েছে :

scala> "%07d".format(123)
res5: String = 0000123

scala> "%07d".formatLocal(java.util.Locale.US, 123)
res6: String = 0000123

স্কেল ২.১০ পোস্ট সম্পাদনা করুন : ফমমিলের পরামর্শ অনুসারে, ২.১০ থেকে, এখানে একটি ফর্ম্যাটিং স্ট্রিং ইন্টারপোলটার (স্থানীয়করণ সমর্থন করে না) রয়েছে:

val expr = 123
f"$expr%07d"
f"${expr}%07d"

এপ্রিল 2019 সম্পাদনা করুন:

  • আপনি যদি শূন্য নয়, শীর্ষস্থানীয় স্পেসগুলি চান তবে কেবল 0বিন্যাস নির্দিষ্টকরণকারক থেকে বাদ দিন from উপরের ক্ষেত্রে, এটি হবে f"$expr%7d"। 2.12.8 REPL এ পরীক্ষিত। কোনও মন্তব্যে প্রস্তাবিত স্ট্রিং প্রতিস্থাপন করার দরকার নেই, বা 7অন্য মন্তব্যে প্রস্তাবিত হিসাবে একটি স্পষ্ট স্পেস রেখে দিতে হবে না ।
  • দৈর্ঘ্য যদি পরিবর্তনশীল হয়, s"%${len}d".format("123")

6
বেন, ডিএইজিজি, আপোভোটের জন্য ধন্যবাদ, আপনি ছেলেরা যদিও কঠোর ভিড়! আমি মনে করি আমরা এখনও অন্য উত্তরগুলি থেকে কিছু শিখতে পারি, এবং কোন উত্তরটি প্রাসঙ্গিক তা ভোটিং সিস্টেম যত্ন করে।
huynhjl

8
আপনার এই স্পষ্ট হওয়ার দরকার নেই, আপনি লিখতে পারেন f"$a%07d"(আপনার যদি val/ var aসুযোগ আছে)।
fommil

4
@ ফোমমিল, প্রকৃতপক্ষে, আমি প্রাথমিক উত্তর পোস্ট করার সময় এখনও সেখানে ছিল না, তবে আমি এখন এফ ইন্টারপোলটারটিও ব্যবহার করব যে এটি বিদ্যমান।
huynhjl

আপনি যদি শীর্ষস্থানীয় শূন্যগুলির পরিবর্তে নেতৃস্থানীয় স্থানগুলি চান তবে আপনি এখানেregex string.replaceAll("\\G0", " ")
বর্ণিত

4
আপনি যদি শীর্ষস্থানীয় শূন্যগুলির পরিবর্তে নেতৃস্থানীয় স্পেসগুলি চান তবে ব্যবহার করুন । "% 7d".format(123)
এরিক ভান অস্টেন

36

সংক্ষিপ্ত উত্তর:

"1234".reverse.padTo(7, '0').reverse

দীর্ঘ উত্তর:

স্কালা স্ট্রিংঅ্যাপস (এতে অন্তর্ভুক্ত রূপান্তরগুলির কারণে স্কাল স্ট্রিং অবজেক্টগুলির যে পদ্ধতিগুলির একটি দুর্দান্ত সেট রয়েছে) এর একটি padToপদ্ধতি রয়েছে, যা আপনার স্ট্রিংয়ে একটি নির্দিষ্ট পরিমাণে অক্ষর যুক্ত করে। উদাহরণ স্বরূপ:

"aloha".padTo(10,'a')

"অ্যালোহআআআআআ" ফিরে আসবে। নোট করুন স্ট্রিংয়ের এলিমেন্ট টাইপটি একটি চর, সুতরাং চারপাশে একক উদ্ধৃতি 'a'

আপনার সমস্যা একটু ভিন্ন যেহেতু আপনি প্রয়োজন বোধ করেন পূর্বে লিখুন পরিবর্তে অক্ষর সংযোজন তাদের। এজন্য আপনাকে স্ট্রিংটি বিপরীতমুখী করতে হবে, ফিল-আপ অক্ষরগুলি সংযোজন করতে হবে (স্ট্রিংটি বিপরীত হওয়ার কারণে আপনি এখনই তাদের প্রপেন্ড করবেন) এবং তারপরে চূড়ান্ত ফলাফল পেতে পুরো জিনিসটিকে আবার বিপরীত করুন।

আশাকরি এটা সাহায্য করবে!


14
স্ট্রিংয়ে ফিরে যাওয়ার জন্য .mkString ব্যবহার করুন
সামিটবেস্ট

4
বা 'a' চরিত্রটি ব্যবহার করুন
লরেন্স ওয়াগারফিল্ড

30

paddingদ্বারা প্রকাশ করা হয় %02dজন্য 0দৈর্ঘ্য করতে পূর্বে সমাধান করা 2:

scala> val i = 9 
i: Int = 9

scala> val paddedVal = f"${num}%02d"
paddedVal: String = 09

scala> println(paddedVal)             
09

এই লাইন ইন val paddedVal = f"${num}%02d"পরিবর্তন হওয়া উচিত numজন্যi
mjbsgll

f"$num%02d"(এখানে কোনও বন্ধনী প্রয়োজন নেই)
হার্টমুট পি।

9

huynhjl আমাকে সঠিক উত্তরে মারধর করেছে, সুতরাং এখানে একটি বিকল্প রয়েছে:

"0000000" + 123 takeRight 7

এটি 10M: "0000000" + Int.MaxValue takeRight 7=> এর বেশি সংখ্যার জন্য ব্যর্থ হবে 7483647। প্রশ্নের আক্ষরিক ব্যাখ্যার দ্বারা "প্রযুক্তিগতভাবে" সঠিক হলেও, পাঠক প্যাডড সংখ্যাটি digit সংখ্যা ছাড়িয়ে to সংখ্যা ছাড়িয়ে যেতে চান না যদি সংখ্যাটি বড় হয়।
এমিল লুন্ডবার্গ

ভাল আপনি বলতে পারেন যে এই সমাধানটি আরও ভাল কারণ গ্রহণযোগ্য সমাধানের বিপরীতে কমপক্ষে অঙ্কগুলি এখনও নির্দিষ্ট ক্ষেত্রে সঠিকভাবে সাজানো আছে। প্রশ্নের পুরো বিষয়টি হ'ল অঙ্কগুলি সঠিকভাবে প্রান্তিক করা।
লুইজি প্লিঞ্জ


1

যদি এই প্রশ্নোত্তর প্রবণতা সংশ্লেষ হয়,

scala> import java.text._
import java.text._

scala> NumberFormat.getIntegerInstance.asInstanceOf[DecimalFormat]
res0: java.text.DecimalFormat = java.text.DecimalFormat@674dc

scala> .applyPattern("0000000")

scala> res0.format(123)
res2: String = 0000123

1

আপনার কি নেতিবাচক সংখ্যাগুলি মোকাবেলা করতে হবে? যদি না হয়, আমি শুধু করব

def str(i: Int) = (i % 10000000 + 10000000).toString.substring(1)

বা

def str(i: Int) = { val f = "000000" + i; f.substring(f.length() - 7) }

অন্যথায়, আপনি ব্যবহার করতে পারেন NumberFormat:

val nf = java.text.NumberFormat.getIntegerInstance(java.util.Locale.US)
nf.setMinimumIntegerDigits(7)
nf.setGroupingUsed(false)
nf.format(-123)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.