如何格式化Scala中的字符串?

Bas*_*evs 26 scala

我需要打印一个包含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))
Run Code Online (Sandbox Code Playgroud)

我应该改变fomatter,数据类型还是其他什么?

Bru*_*eis 40

您可以尝试以下方式:

val number: Long = 3243
"%d".format(number)
Run Code Online (Sandbox Code Playgroud)

  • 在解释**为什么**这也应该是这样的情况下也很有价值. (9认同)

Kev*_*ght 20

Scala中的格式方法直接存在于String 实例中,因此您不需要/想要静态类方法.您也不需要手动打包long原语,让编译器为您处理所有这些!

String.format("%d", new java.lang.Integer(number))
Run Code Online (Sandbox Code Playgroud)

因此写得更好

"%d".format(number)
Run Code Online (Sandbox Code Playgroud)


Rex*_*err 7

@ Bruno的答案就是你在大多数情况下应该使用的答案.

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

String.format("%d",number.asInstanceOf[AnyRef])
Run Code Online (Sandbox Code Playgroud)

这将Long很好地为Java打包.

  • 对于Java,`RichLong`只是一些随机类.Java期望看到对应于"%d"的盒装原始整数.所以当Java得到一个`RichLong`时,当然会抛出一个契合.`asInstanceOf [AnyRef]`优先装入`java.lang`类,而不是`Rich`类. (2认同)