प्रारूप के साथ एक स्ट्रिंग कैसे बनाएं?


187

मुझे प्रारूप के साथ एक स्ट्रिंग बनाने की आवश्यकता है जो इंट, लॉन्ग, डबल आदि प्रकारों को स्ट्रिंग में बदल सकती है। ओबज-सी का उपयोग करना, मैं इसे नीचे के माध्यम से कर सकता हूं।

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
बहुत बढ़िया जवाब! इसे करने का यह बिल्कुल सही तरीका है। दूसरों के लिए, ध्यान दें कि वर्ग विधि "stringWithFormat" "WithFormat" को "प्रारूप:" के नाम वाले पहले तर्क में बदल दिया गया है। मूल प्रश्न में कोई विशिष्ट स्वरूपण नहीं जोड़ा गया, जैसे कि फ़्लोटिंग पॉइंट दशमलव की संख्या को प्रदर्शित करने के लिए, यदि वह था, तो आपका एकमात्र उत्तर होगा!
डेविड एच।

4
क्या आप प्रलेखन से जुड़ेंगे? मुझे इसे ट्रैक करने में समस्या हो रही है।
dumbledad

3
इस विधि से आ रही है NSStringमें Foundationरूपरेखा । इसलिए आपको इसे import Foundationसही तरीके से काम करने के लिए बनाना होगा। अन्यथा अभिव्यक्ति बुलाएगी String.init<T>(T), और यह "(\"%@%x %x\", 10)"इसके बजाय कुछ पैदा करेगा ।
eonil

1
@realityone %@%xप्रतीकों का क्या अर्थ है? क्या आप मुझे ऐसे संसाधन की ओर संकेत कर सकते हैं, जहाँ मैं इसके बारे में अधिक जान सकता हूँ।
बिबसी



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

अद्यतन: मैंने यह उत्तर स्विफ्ट को String(format:)एपीआई में जोड़ने से पहले लिखा था । शीर्ष उत्तर द्वारा दी गई विधि का उपयोग करें ।


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)"

उपयोगकर्ता द्वारा फ़ॉर्मेटिंग के बारे में पूछे जाने के बाद से दोनों स्वीकार्य हैं और दोनों मामले फिट होते हैं कि वे क्या पूछ रहे हैं:

मुझे प्रारूप के साथ एक स्ट्रिंग बनाने की आवश्यकता है जो इंट, लॉन्ग, डबल आदि प्रकारों को स्ट्रिंग में बदल सकती है।

जाहिर है कि पूर्ववर्ती प्रारूपण की तुलना में पूर्व में महीन नियंत्रण होता है, लेकिन इसका अर्थ यह नहीं है कि उत्तरार्द्ध स्वीकार्य उत्तर नहीं है।



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))
        }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.