উত্তর:
ধরে নিই যে আপনি নেতৃস্থানীয় শূন্যগুলি দিয়ে 2 এর ক্ষেত্রের দৈর্ঘ্য চান:
import Foundation
for myInt in 1 ... 3 {
print(String(format: "%02d", myInt))
}
আউটপুট:
01 02 03
এটির import Foundation
প্রযুক্তিগতভাবে এটি প্রয়োজন কারণ এটি সুইফট ভাষার অংশ নয় তবে Foundation
কাঠামোর দ্বারা সরবরাহ করা একটি ক্ষমতা । মনে রাখবেন যে উভয়ই অন্তর্ভুক্ত import UIKit
এবং এর import Cocoa
মধ্যে Foundation
এটি ইতিমধ্যে আমদানি করা প্রয়োজন হয় না যদি আপনি ইতিমধ্যে আমদানি করে থাকেন Cocoa
বা UIKit
।
ফর্ম্যাট স্ট্রিং একাধিক আইটেমের বিন্যাস নির্দিষ্ট করতে পারে। উদাহরণস্বরূপ, আপনি যদি 3
ঘন্টা, 15
মিনিট এবং 7
সেকেন্ডের মধ্যে ফর্ম্যাট করার চেষ্টা করছেন তবে 03:15:07
এটি এটি করতে পারেন:
let hours = 3
let minutes = 15
let seconds = 7
print(String(format: "%02d:%02d:%02d", hours, minutes, seconds))
আউটপুট:
03:15:07
println("0\(myInt)")
আপনার পরামর্শটি বেছে নেব । এটি এনএসএসস্ট্রিং ফর্ম্যাটিংয়ের পরিবর্তে সুইফট নেটিভ স্ট্রিং ক্লাসটি ব্যবহার করবে।
String(format: "%03d", myInt)
দিতে হবে "000", "001", ... , "099", "100"
।
-3, -9
দেখা দিলে এগুলির সমস্যা , এটি এখনও শূন্য ছাড়াই অগ্রিম শূন্য করে।
সুইফ্ট 5 এর সাহায্যে আপনি আপনার সমস্যা সমাধানের জন্য নীচে প্রদর্শিত তিনটি উদাহরণের মধ্যে একটি চয়ন করতে পারেন ।
String
এর init(format:_:)
ইনিশিয়ালাইজার ব্যবহার করা হচ্ছেFoundation
সুইফট String
একটি init(format:_:)
ইনিশিয়ালাইজার সরবরাহ করে। init(format:_:)
নিম্নলিখিত ঘোষণা আছে:
init(format: String, _ arguments: CVarArg...)
String
প্রদত্ত বিন্যাসের স্ট্রিংটিকে টেম্পলেট হিসাবে ব্যবহার করে আরম্ভ করা কোনও বস্তু ফেরত দেয় যাতে বাকী আর্গুমেন্টের মান প্রতিস্থাপন করা হয়।
নিম্নলিখিত খেলার মাঠের কোডটি দেখায় যে কীভাবে কমপক্ষে দুটি পূর্ণসংখ্যার সংখ্যার সাহায্যে String
বিন্যাস তৈরি করতে Int
হয় init(format:_:)
:
import Foundation
let string0 = String(format: "%02d", 0) // returns "00"
let string1 = String(format: "%02d", 1) // returns "01"
let string2 = String(format: "%02d", 10) // returns "10"
let string3 = String(format: "%02d", 100) // returns "100"
String
এরinit(format:arguments:)
ইনিশিয়ালাইজার করা হচ্ছেFoundation
সুইফট String
একটি init(format:arguments:)
ইনিশিয়ালাইজার সরবরাহ করে। init(format:arguments:)
নিম্নলিখিত ঘোষণা আছে:
init(format: String, arguments: [CVarArg])
ফিরে আসে a
String
প্রদত্ত বিন্যাসের স্ট্রিংটিকে টেমপ্লেট হিসাবে ব্যবহার করে আরম্ভ করা বস্তু দেয় যাতে ব্যবহারকারীর ডিফল্ট লোকেল অনুসারে অবশিষ্ট আর্গুমেন্টের মান প্রতিস্থাপন করা হয়।
নিম্নলিখিত খেলার মাঠের কোডটি দেখায় যে কীভাবে কমপক্ষে দুটি পূর্ণসংখ্যার সংখ্যার সাহায্যে String
বিন্যাস তৈরি করতে Int
হয় init(format:arguments:)
:
import Foundation
let string0 = String(format: "%02d", arguments: [0]) // returns "00"
let string1 = String(format: "%02d", arguments: [1]) // returns "01"
let string2 = String(format: "%02d", arguments: [10]) // returns "10"
let string3 = String(format: "%02d", arguments: [100]) // returns "100"
NumberFormatter
ফাউন্ডেশন সরবরাহ করে NumberFormatter
। অ্যাপল এটি সম্পর্কে বলেছেন:
NSNumberFormatter
এমন কক্ষগুলির পাঠ্য উপস্থাপনা ফর্ম্যাট করার উদাহরণগুলিতে যাNSNumber
বস্তুগুলি ধারণ করে এবং সংখ্যাসূচক মানগুলির পাঠ্য উপস্থাপনাকে রূপান্তর করেNSNumber
করে। উপস্থাপনাটি পূর্ণসংখ্যার, ভাসমান এবং দ্বিগুণকে ধারণ করে; ফ্লোটস এবং ডাবলগুলি একটি নির্দিষ্ট দশমিক অবস্থানে ফর্ম্যাট করা যায়।
নিম্নলিখিত খেলার মাঠের কোডটি দেখায় যে কীভাবে একটি তৈরি করা যায় NumberFormatter
যা কমপক্ষে দুটি পূর্ণসংখ্যার অঙ্ক সহ String?
একটি থেকে ফিরে আসে Int
:
import Foundation
let formatter = NumberFormatter()
formatter.minimumIntegerDigits = 2
let optionalString0 = formatter.string(from: 0) // returns Optional("00")
let optionalString1 = formatter.string(from: 1) // returns Optional("01")
let optionalString2 = formatter.string(from: 10) // returns Optional("10")
let optionalString3 = formatter.string(from: 100) // returns Optional("100")
বাম প্যাডিংয়ের জন্য এই জাতীয় স্ট্রিং এক্সটেনশন যুক্ত করুন:
সুইফট ২.০ +
extension String {
func padLeft (totalWidth: Int, with: String) -> String {
let toPad = totalWidth - self.characters.count
if toPad < 1 { return self }
return "".stringByPaddingToLength(toPad, withString: with, startingAtIndex: 0) + self
}
}
সুইফট 3.0 +
extension String {
func padLeft (totalWidth: Int, with: String) -> String {
let toPad = totalWidth - self.characters.count
if toPad < 1 { return self }
return "".padding(toLength: toPad, withPad: with, startingAt: 0) + self
}
}
এই পদ্ধতিটি ব্যবহার করে:
for myInt in 1...3 {
print("\(myInt)".padLeft(totalWidth: 2, with: "0"))
}
সুইফট 3.0+
বাম প্যাডিং String
এক্সটেনশন অনুরূপ padding(toLength:withPad:startingAt:)
মধ্যেFoundation
extension String {
func leftPadding(toLength: Int, withPad: String = " ") -> String {
guard toLength > self.characters.count else { return self }
let padding = String(repeating: withPad, count: toLength - self.characters.count)
return padding + self
}
}
ব্যবহার:
let s = String(123)
s.leftPadding(toLength: 8, withPad: "0") // "00000123"
withPad
যুক্তিটি যদি একটি চরিত্রের চেয়ে বেশি হয়ে যায় তবে ব্যবহারকারী এটি প্রত্যাশা হিসাবে কাজ করতে পারে বা নাও করতে পারে ।
@ আইমানুও উত্তরগুলি ইতিমধ্যে দুর্দান্ত, তবে আপনি যদি সংখ্যায় পূর্ণ একটি অ্যাপ্লিকেশন নিয়ে কাজ করছেন তবে আপনি এটির মতো একটি এক্সটেনশন বিবেচনা করতে পারেন:
extension String {
init(withInt int: Int, leadingZeros: Int = 2) {
self.init(format: "%0\(leadingZeros)d", int)
}
func leadingZeros(_ zeros: Int) -> String {
if let int = Int(self) {
return String(withInt: int, leadingZeros: zeros)
}
print("Warning: \(self) is not an Int")
return ""
}
}
এইভাবে আপনি যেখানেই কল করতে পারেন:
String(withInt: 3)
// prints 03
String(withInt: 23, leadingZeros: 4)
// prints 0023
"42".leadingZeros(2)
// prints 42
"54".leadingZeros(3)
// prints 054
অন্যান্য উত্তরগুলি ভাল যদি আপনি কেবল ফরম্যাট স্ট্রিং ব্যবহার করে সংখ্যার সাথে কাজ করে থাকেন তবে এটি ভাল যখন আপনার প্যাডগুলি প্যাড করার প্রয়োজন হতে পারে (যদিও স্বীকার করা প্রশ্নটির চেয়ে কিছুটা পৃথক পৃথক বলে মনে হয়)। এছাড়াও, প্যাডের চেয়ে স্ট্রিং দীর্ঘ হলে সতর্কতা অবলম্বন করুন।
let str = "a str"
let padAmount = max(10, str.count)
String(repeatElement("-", count: padAmount - str.count)) + str
আউটপুট "-----a str"
এক্সকোড 9.0.1, সুইফট 4.0
উপাত্ত
import Foundation
let array = [0,1,2,3,4,5,6,7,8]
সমাধান ঘ
extension Int {
func getString(prefix: Int) -> String {
return "\(prefix)\(self)"
}
func getString(prefix: String) -> String {
return "\(prefix)\(self)"
}
}
for item in array {
print(item.getString(prefix: 0))
}
for item in array {
print(item.getString(prefix: "0x"))
}
সমাধান 2
for item in array {
print(String(repeatElement("0", count: 2)) + "\(item)")
}
সমাধান 3
extension String {
func repeate(count: Int, string: String? = nil) -> String {
if count > 1 {
let repeatedString = string ?? self
return repeatedString + repeate(count: count-1, string: repeatedString)
}
return self
}
}
for item in array {
print("0".repeate(count: 3) + "\(item)")
}
ফর্ম্যাটর ব্যবহার করা অন্যান্য উত্তরগুলির বিপরীতে, আপনি লুপের ভিতরে প্রতিটি সংখ্যার সামনে একটি "0" পাঠ্য যুক্ত করতে পারেন:
for myInt in 1...3 {
println("0" + "\(myInt)")
}
ধরুন আপনাকে যখন প্রতিটি পৃথক সংখ্যার জন্য একটি নির্ধারিত পরিমাণ 0 টি যোগ করতে হয় তখন ফর্ম্যাটরটি প্রায়শই ভাল। আপনার যদি কেবল একটি 0 যুক্ত করতে হয় তবে তা সত্যিই আপনার চয়ন।