在scala中格式化字符串

时间:2016-05-05 10:11:15

标签: scala

我有这样的json字符串:

str = {"id" : %s, "name": %s}

我想用值替换格式说明符%s。我有包含要替换的值的数组。

我可以使用

执行此操作
str.format(arrayofvalue: _*)  

但这仅适用于一种特定类型的格式标识符。

如果我的字符串有多个格式说明符,如(%d,%s)

,该怎么办?
str = {"id" : %d, "name": %s}

上面的解决方案在这种情况下不起作用(illegalFormatConversion)。是否有任何功能/工作来处理这个问题。

2 个答案:

答案 0 :(得分:1)

如果类型不兼容,则会出现此异常。

 val str = "{\"id\" : %d, \"name\": %s}"
 val arrayofvalue = Array("1", "a")
 val output = str.format(arrayofvalue: _*)
 println(output)    
 // will result in java.util.IllegalFormatConversionException: d != java.lang.String

但如果您提供兼容类型,它将起作用:

 val str = "{\"id\" : %d, \"name\": %s}"
 val arrayofvalue = Array(1, "a")
 val output = str.format(arrayofvalue: _*)
 println(output)

答案 1 :(得分:1)

使用str.format(arrayofvalue: _*)有效。您的问题是您在数组中传入了错误的类型,或者数组中的值顺序错误。

您可以验证它是否适用于此示例:

val str = """{"id" : %d, "name": %s}"""
val arrayOfValue = Array(1, "John")
str.format(arrayOfValue: _*) // returns: {"id" : 1, "name": John}

现在,如果我将arrayOfValue更改为

val arrayOfValue = Array("1", "John") 

(注意参数"1"现在不是Int而是String),你得到异常java.util.IllegalFormatConversionException: d != java.lang.String