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

如何在Scala中格式化字符串?,scala,Scala,我需要打印一个包含scala.Long的格式化字符串。 java.lang.String.format()与scala.Long(编译时)和RichLong(java.util.IllegalFormatConversionException)不兼容 编译器警告不要在以下工作代码中使用整数: val number:Long = 3243 String.format("%d", new java.lang.Long(number)) 我应该更改fomatter、数据类型或其他内容吗?您可以尝试以

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

编译器警告不要在以下工作代码中使用整数:

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

我应该更改fomatter、数据类型或其他内容吗?

您可以尝试以下方法:

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

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

String.format("%d", new java.lang.Integer(number))
因此,最好写为

"%d".format(number)

@布鲁诺的答案是在大多数情况下你应该使用的

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

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

这将很好地为Java装箱
长的

这很有效。你知道为什么这不会像我的RichLong方法那样导致运行时错误吗?
RichLong
对于Java来说只是一个随机类。Java希望看到与
“%d”
相对应的装箱基本整数。因此,当Java获得
RichLong
时,它当然会大发雷霆。
asInstanceOf[AnyRef]
优先放入
java.lang
类,而不是
Rich
类。解释为什么会出现这种情况也很有价值。
.format
在这种情况下将是
StringLike
方法,它是从字符串文本隐式创建的。