ফর্ম্যাট দিয়ে স্ট্রিং কিভাবে তৈরি করবেন?


187

আমার বিন্যাসের সাথে একটি স্ট্রিং তৈরি করতে হবে যা int, দীর্ঘ, ডাবল ইত্যাদি প্রকারকে স্ট্রিংয়ে রূপান্তর করতে পারে। ওবজে-সি ব্যবহার করে, আমি নীচের দিক দিয়ে এটি করতে পারি।

NSString *str = [NSString stringWithFormat:@"%d , %f, %ld, %@", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE, STRING_VALUE];

দ্রুত সঙ্গে একই কাজ কিভাবে?

উত্তর:


385

আমি মনে করি এটি আপনাকে সহায়তা করতে পারে:

let timeNow = time(nil)
let aStr = String(format: "%@%x", "timeNow in hex: ", timeNow)
print(aStr)

উদাহরণ ফলাফল:

timeNow in hex: 5cdc9c8d

1
দুর্দান্ত উত্তর! এটি করা একেবারে সঠিক উপায়। অন্যদের জন্য, নোট করুন যে শ্রেণি পদ্ধতি "স্ট্রিংউইথ ফোর্ম্যাট" ক্লাসে একটি "ইন ফরমেট" দিয়ে "ফর্ম্যাট:" এর নামযুক্ত প্রথম যুক্তিতে পরিণত হয় init মূল প্রশ্নটি কোনও নির্দিষ্ট বিন্যাস যুক্ত করে নি, যেমন প্রদর্শন করতে ভাসমান পয়েন্ট দশমিকের সংখ্যা পরিবর্তন করা, যদি সে থাকে তবে আপনার উত্তরটিই হবে!
ডেভিড এইচ

4
আপনি কি ডকুমেন্টেশনে লিঙ্ক করবেন? এটি ট্র্যাক করতে আমার সমস্যা হচ্ছে।
ডুম্বলডেড

3
এই পদ্ধতি থেকে আসছে NSStringFoundationফ্রেমওয়ার্ক । সুতরাং আপনাকে এটি import Foundationসঠিকভাবে কাজ করতে হবে। অন্যথায় এক্সপ্রেশন কল করবে String.init<T>(T)এবং এটি "(\"%@%x %x\", 10)"পরিবর্তে এর মতো কিছু তৈরি করবে ।
eonil

1
@ বাস্তবতা %@%xপ্রতীক মানে কি? আপনি কি আমাকে এমন কোনও উত্সের দিকে নির্দেশ করতে পারেন যেখানে আমি এটি সম্পর্কে আরও জানতে পারি।
বাইবেসি



49
let str = "\(INT_VALUE), \(FLOAT_VALUE), \(DOUBLE_VALUE), \(STRING_VALUE)"

আপডেট: সুইফট String(format:)এটির API এ যুক্ত করার আগে আমি এই উত্তরটি লিখেছিলাম । উপরের উত্তর দ্বারা প্রদত্ত পদ্ধতিটি ব্যবহার করুন ।


6
আমি মনে করি না যে এটি আসলে প্রশ্নের উত্তর দেয় কারণ কোনও বিন্যাস নেই। এই পদ্ধতিটি ব্যবহার করে আপনি আপনার ভাসমান পয়েন্টগুলিতে কত দশমিক থাকতে হবে তা ফর্ম্যাট করতে পারবেন না। ব্যবহার String(format:arguments:)আরো উপযুক্ত হবে ফর্ম্যাটিং যোগ করার জন্য
ক্রিস

4
ওপি কোনও বিন্যাসের জন্য জিজ্ঞাসা করেনি, বিন্যাসের সাথে স্ট্রিং তৈরির একটি উপায় যা ইনট, দীর্ঘ, ডাবল ইত্যাদি ধরণের স্ট্রিংয়ে রূপান্তর করতে পারে
জন এস্ট্রোপিয়া

প্রশ্নটি তখন অস্পষ্ট। কারণ তিনি -stringWithFormat:যা চান তার সাথে তুলনা করছেন যা ফর্ম্যাট করতে দেয়। সুইফট সালে String(format:arguments:)OBJ-সি এর সুইফট সংস্করণ হবে-stringWithFormat:
ক্রিস

প্রশ্নের তারিখ পরীক্ষা করুন। এটি সুইফটের প্রথম প্রকাশের সময় NSStringছিল যখন সুইফ্টগুলিতে এখনও পদ্ধতিগুলি প্রয়োগ করা হয়নি String
জন এস্ট্রোপিয়া

আমি সংশোধন করেছি. ভবিষ্যতে একই সমস্যা অনুসন্ধান করা যে কারও জন্য নতুন উপায়ে দৃশ্যমান হওয়া এখনও ভাল
ক্রিস


15

আমি যে উভয় তর্ক করতে হবে

let str = String(format:"%d, %f, %ld", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE)

এবং

let str = "\(INT_VALUE), \(FLOAT_VALUE), \(DOUBLE_VALUE)"

ব্যবহারকারী উভয়ই গ্রহণযোগ্য কারণ যেহেতু ব্যবহারকারী বিন্যাস সম্পর্কে জিজ্ঞাসা করেছেন এবং উভয় ক্ষেত্রেই তারা যা জিজ্ঞাসা করছেন তা মাপসই:

আমার বিন্যাসের সাথে একটি স্ট্রিং তৈরি করতে হবে যা int, দীর্ঘ, ডাবল ইত্যাদি প্রকারকে স্ট্রিংয়ে রূপান্তর করতে পারে।

স্পষ্টতই পূর্বেরটি ফর্ম্যাটিংয়ের উপরের চেয়ে সূক্ষ্ম নিয়ন্ত্রণের অনুমতি দেয় তবে এর অর্থ এই নয় যে দ্বিতীয়টি কোনও গ্রহণযোগ্য উত্তর নয়।



5

প্রথমে সুইফ্ট ভাষার জন্য অফিসিয়াল ডকুমেন্টেশন পড়ুন

উত্তর হওয়া উচিত

var str = "\(INT_VALUE) , \(FLOAT_VALUE) , \(DOUBLE_VALUE), \(STRING_VALUE)"
println(str)

এখানে

1) ডিফল্টরূপে কোনও ভাসমান পয়েন্টের মান double

EX.
 var myVal = 5.2 // its double by default;

-> আপনি যদি ভাসমান পয়েন্টের মানটি প্রদর্শন করতে চান তবে আপনাকে স্পষ্টভাবে একটি এর মতো সংজ্ঞা দিতে হবে

 EX.
     var myVal:Float = 5.2 // now its float value;

এটি আরও স্পষ্ট।


2
let INT_VALUE=80
let FLOAT_VALUE:Double= 80.9999
let doubleValue=65.0
let DOUBLE_VALUE:Double= 65.56
let STRING_VALUE="Hello"

let str = NSString(format:"%d , %f, %ld, %@", INT_VALUE, FLOAT_VALUE, DOUBLE_VALUE, STRING_VALUE);
 println(str);

2
সংশোধক ব্যবহার করার প্রয়োজন নেই। আমরা এটি পরিবর্তনকারী ছাড়াইও ব্যবহার করতে পারি। এটি সঠিক তবে দীর্ঘ কোড।
গৌরব গিলানী

1

আমি জানি এই প্রকাশের পরে অনেক সময় কেটে গেছে, তবে আমি একই পরিস্থিতিতে পড়েছি এবং আমার জীবনকে সহজ করার জন্য একটি সহজ ক্লাস তৈরি করেছি।

public struct StringMaskFormatter {

    public var pattern              : String    = ""
    public var replecementChar      : Character = "*"
    public var allowNumbers         : Bool      = true
    public var allowText            : Bool      = false


    public init(pattern:String, replecementChar:Character="*", allowNumbers:Bool=true, allowText:Bool=true)
    {
        self.pattern            = pattern
        self.replecementChar    = replecementChar
        self.allowNumbers       = allowNumbers
        self.allowText          = allowText
    }


    private func prepareString(string:String) -> String {

        var charSet : NSCharacterSet!

        if allowText && allowNumbers {
            charSet = NSCharacterSet.alphanumericCharacterSet().invertedSet
        }
        else if allowText {
            charSet = NSCharacterSet.letterCharacterSet().invertedSet
        }
        else if allowNumbers {
            charSet = NSCharacterSet.decimalDigitCharacterSet().invertedSet
        }

        let result = string.componentsSeparatedByCharactersInSet(charSet)
        return result.joinWithSeparator("")
    }

    public func createFormattedStringFrom(text:String) -> String
    {
        var resultString = ""
        if text.characters.count > 0 && pattern.characters.count > 0
        {

            var finalText   = ""
            var stop        = false
            let tempString  = prepareString(text)

            var formatIndex = pattern.startIndex
            var tempIndex   = tempString.startIndex

            while !stop
            {
                let formattingPatternRange = formatIndex ..< formatIndex.advancedBy(1)

                if pattern.substringWithRange(formattingPatternRange) != String(replecementChar) {
                    finalText = finalText.stringByAppendingString(pattern.substringWithRange(formattingPatternRange))
                }
                else if tempString.characters.count > 0 {
                    let pureStringRange = tempIndex ..< tempIndex.advancedBy(1)
                    finalText = finalText.stringByAppendingString(tempString.substringWithRange(pureStringRange))
                    tempIndex = tempIndex.advancedBy(1)
                }

                formatIndex = formatIndex.advancedBy(1)

                if formatIndex >= pattern.endIndex || tempIndex >= tempString.endIndex {
                    stop = true
                }

                resultString = finalText

            }
        }

        return resultString
    }

}

নিম্নলিখিত লিঙ্কটি সম্পূর্ণ উত্স কোডটিতে প্রেরণ করুন: https://gist.github.com/dedeexe/d9a43894081317e7c418b96d1d081b25

এই সমাধানটি এই নিবন্ধটির ভিত্তি ছিল: http://vojtastavik.com/2015/03/29/real-time-formatting-in-uitextfield-swift-basics/


1

"আমরা <3 সুইফ্ট" দিয়ে শিখেছি এমন একটি সহজ সমাধান রয়েছে যা আপনি যদি ফাউন্ডেশন আমদানি করতে না পারেন , গোল () ব্যবহার করতে পারেন এবং / অথবা স্ট্রিং না চান :

var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0

ফলাফল: 31.726


0

এই নিম্নলিখিত কোড ব্যবহার করুন:

    let intVal=56
    let floatval:Double=56.897898
    let doubleValue=89.0
    let explicitDaouble:Double=89.56
    let stringValue:"Hello"

    let stringValue="String:\(stringValue) Integer:\(intVal) Float:\(floatval) Double:\(doubleValue) ExplicitDouble:\(explicitDaouble) "

-1

এটি চেষ্টা করে সাফল্য:

 var letters:NSString = "abcdefghijkl"
        var strRendom = NSMutableString.stringWithCapacity(strlength)
        for var i=0; i<strlength; i++ {
            let rndString = Int(arc4random() % 12)
            //let strlk = NSString(format: <#NSString#>, <#CVarArg[]#>)
            let strlk = NSString(format: "%c", letters.characterAtIndex(rndString))
            strRendom.appendString(String(strlk))
        }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.