在Scala中使用String.format时出错-java.util.MissingFormatArgumentException:格式说明符“%s”

在Scala中使用String.format时出错-java.util.MissingFormatArgumentException:格式说明符“%s”,scala,split,Scala,Split,我正在尝试使用String.format替换Scala中的子字符串。我在数组[字符串]中有子字符串值 代码如下: val Input_Query = "select * from table where arg_1 = %s and arg_2 = %s" val str1 = "2019_09" val dbpairs = str1.split("_") val query = Input_Query.format(dbpai

我正在尝试使用String.format替换Scala中的子字符串。我在数组[字符串]中有子字符串值

代码如下:

 val Input_Query = "select * from table where arg_1 = %s and arg_2 = %s"
 val str1 = "2019_09"
 val dbpairs = str1.split("_")
 val query = Input_Query.format(dbpairs)
预期产出: 从arg_1=2019和arg_2=09的表格中选择*

错误:

java.util.MissingFormatArgumentException:格式说明符“%s” 位于java.util.Formatter.Formatter.java:2519 位于java.util.Formatter.Formatter.java:2455


您的问题是试图将数组参数传递给varargs方法格式

问题在于: val query=Input_query.formatdbpairs

格式签名为:

def formatargs:Any*:字符串

Any*表示它接受任何类型的一个或多个元素

您的代码应该是:

val Input_Query = "select * from table where arg_1 = %s and arg_2 = %s"
val str1 = "2010_09"
val dbpairs: Array[String] = str1.split("_")
val query = Input_Query.format(dbpairs:_*)
println(query) // select * from table where arg_1 = 2010 and arg_2 = 09
调用varargs方法时,应该使用:*语法传递它,而不仅仅是传递数组或Seq。 在您的情况下,还可以使用字符串插值

有用链接: