java.util.MissingFormatArgumentException:格式说明符“%2$s”

Viv*_*odi 4 android kotlin

我有绳子

<string name="data">%1$s / %2$s</string>
Run Code Online (Sandbox Code Playgroud)

我在函数中传递可变参数

fun getText(varargs text: String) : String {
    return getString(R.string.data,text)
}
Run Code Online (Sandbox Code Playgroud)

我在活动中调用了函数

getText("1" ,"2")
Run Code Online (Sandbox Code Playgroud)

它给出了错误

E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.vivek, PID: 5126
  java.util.MissingFormatArgumentException: Format specifier '%2$s'
    at java.util.Formatter.format(Formatter.java:2529)
    at java.util.Formatter.format(Formatter.java:2459)
    at java.lang.String.format(String.java:2911)
Run Code Online (Sandbox Code Playgroud)

NoH*_*Dan 8

接受的答案实际上并没有解决问题,所以我不太确定为什么它被接受。

String.format使用,Context.getStringFragment.getString或并不重要Resources.getString。问题在于如何varargs解释论证。看起来像 Kotlin 的东西。简而言之,它将整个varargs作为一个数组,就像它是一个单个对象一样,并将其作为参数之一传递给varargs在函数中调用的函数。

因此,为了让 Kotlin 不这样做,你只需要用星号(所谓的 Spread 运算符)来扩展参数,如下所示:varargs

fun getText(varargs text: String) : String {
    return getString(R.string.data, *text)
}
Run Code Online (Sandbox Code Playgroud)

这是经过测试的解决方案。