【问题标题】:How to format strings in Scala?如何在 Scala 中格式化字符串?
【发布时间】:2010-10-22 00:40:34
【问题描述】:

我需要打印一个包含 scala.Long 的格式化字符串。 java.lang.String.format() 与scala.Long(编译时)和RichLong(java.util.IllegalFormatConversionException)不兼容

编译器警告 Integer 在以下工作代码中被弃用:

val number:Long = 3243
String.format("%d", new java.lang.Long(number))

我应该更改格式、数据类型还是其他?

【问题讨论】:

    标签: scala


    【解决方案1】:

    你可以试试这样的:

    val number: Long = 3243
    "%d".format(number)
    

    【讨论】:

    • 解释为什么应该是这种情况也很有价值。
    • .format 在这种情况下将是 StringLike 的方法,它是从字符串文字隐式创建的。
    【解决方案2】:

    Scala 中的 format 方法直接存在于 String 的 instances 上,因此您不需要/想要静态类方法。您也不需要手动装箱 long 原语,让编译器为您处理所有这些!

    String.format("%d", new java.lang.Integer(number))
    

    因此最好写成

    "%d".format(number)
    

    【讨论】:

      【解决方案3】:

      @Bruno 的答案是您在大多数情况下应该使用的答案。

      如果您必须使用 Java 方法进行格式化,请使用

      String.format("%d",number.asInstanceOf[AnyRef])
      

      这将为 Java 很好地装箱 Long

      【讨论】:

      • 这行得通。你知道为什么这不会像我的 RichLong 方法那样导致运行时错误吗?
      • RichLong 对于 Java 来说只是一些随机类。 Java 期望看到对应于"%d" 的盒装原始整数。因此,当 Java 获得RichLong 时,它当然会出现故障。 asInstanceOf[AnyRef] 优先框入 java.lang 类,而不是 Rich 类。
      猜你喜欢
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      相关资源
      最近更新 更多