如何在Scala中格式化字符串?
我需要打印一个包含scala.Long的格式化字符串。 java.lang.String.format()与scala.Long(编译时)和RichLong(java.util.IllegalFormatConversionException)不兼容 编译器警告不要在以下工作代码中使用整数:如何在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、数据类型或其他内容吗?您可以尝试以
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
方法,它是从字符串文本隐式创建的。