形式で文字列を作成する方法は?


187

int、long、doubleなどの型を文字列に変換できる形式の文字列を作成する必要があります。Obj-Cを使用して、私は以下の方法でそれを行うことができます。

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

迅速に同じことをするには?

回答:


386

これはあなたに役立つと思います:

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

結果の例:

timeNow in hex: 5cdc9c8d

1
正解です。これは絶対に正しい方法です。その他の場合は、クラスメソッド「stringWithFormat」がクラスのinit呼び出しに変換され、「WithFormat」が「format:」の名前付きの最初の引数に変換されることに注意してください。元の質問では、浮動小数点の小数点以下の桁数を変更して表示するなど、特定の形式を追加していませんでした。
David H

4
ドキュメントにリンクしますか?追跡できません。
dumbledad 2015年

3
このメソッドは、から来ているNSStringFoundationフレームワーク。したがってimport Foundation、これを正しく機能させる必要があります。そうでない場合、式はを呼び出しString.init<T>(T)"(\"%@%x %x\", 10)"代わりにのようなものを生成します。
eonil

1
@realityone %@%x記号はどういう意味ですか?詳細を確認できる資料を教えていただけますか。
ゼッケン2018



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

更新: SwiftがString(format:)APIに追加する前に、この回答を書きました。上位の回答で示された方法を使用してください。


6
書式設定がないため、これが実際に質問に答えるとは思いません。この方法を使用すると、浮動小数点数の小数点以下の桁数をフォーマットできません。String(format:arguments:)書式設定を追加するには、使用する方が適切です
Chris

4
OPはフォーマットを要求しませんでした。int、long、doubleなどの型をstringに変換できるフォーマットの文字列作成する方法です。
John Estropia、2015

その時の問題ははっきりしない。なぜなら、彼は自分が何をしたいのかを比較して-stringWithFormat:いて、フォーマットを可能にしているからです。Swiftでは、String(format:arguments:)Obj-CのSwiftバージョン-stringWithFormat:
Chris

質問の日付を確認してください。これは、NSStringメソッドがまだSwiftに実装されていない、Swiftの最初のリリースでしたString
John Estropia、2015

私は修正された立場です。将来的には同じ問題を探す人のために目に見える新しい方法を持っていることはまだ良い
クリス・

42

NSString必要ありません!

String(format: "Value: %3.2f\tResult: %3.2f", arguments: [2.7, 99.8])

または

String(format:"Value: %3.2f\tResult: %3.2f", 2.7, 99.8)

15

私は両方と主張します

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

そして

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

ユーザーがフォーマットについて尋ねたのでどちらも許容され、どちらのケースも彼らが求めているものに適合します:

int、long、doubleなどの型を文字列に変換できる形式の文字列を作成する必要があります。

明らかに前者は後者よりもフォーマットをより細かく制御することができますが、それは後者が許容できる答えではないことを意味しません。


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

5

まず、Swift言語の公式ドキュメントをお読みください

答えは

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
修飾子を使用する必要はありません。修飾子なしで使用することもできます。それは正しいですが、長いコードです。
Gaurav Gilani 2014

1

私はこの公開から多くの時間が経過したことを知っていますが、同様の状況に陥り、私の人生を単純化するためにsimplesクラスを作成しました。

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

Foundationをインポートできない、round()を使用できない、またはStringが不要な場合は、「We <3 Swift」で学習した簡単な解決策があります。

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

-2

それを試すことに成功:

 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.