String 带插值器的scala字符串格式设置不起作用

String 带插值器的scala字符串格式设置不起作用,string,scala,string-formatting,String,Scala,String Formatting,我是scala的新手,正在尝试一些字符串格式化 val mAPRegisterResponseMessage = s"{\" 'type' \": \"ap_register_response\", \"message_id\": 02,\"register_status\": $registerStatus,\"host_name_type\": $host_name_type, \"host_name\": $host_name, \"port_num\":$port_num }"

我是scala的新手,正在尝试一些字符串格式化

val mAPRegisterResponseMessage = s"{\" 'type' \": \"ap_register_response\",  
 \"message_id\": 02,\"register_status\": $registerStatus,\"host_name_type\": 
 $host_name_type, \"host_name\": $host_name, \"port_num\":$port_num }"
如果我删除开头的s,那么字符串文字就形成了,但显然不正确。但是,在开始添加s之后,第二个反斜杠出现了一个错误,即未关闭字符文本。
我做错了什么?任何线索都会有帮助。

您可以使用三重引号:

s""" {"foo" : 2, "bar": $registerStatus} """
Scala控制台:

scala> val registerStatus = "new"
registerStatus: String = new

scala> s""" {"foo" : 2, "bar": $registerStatus} """
res0: String = " {"foo" : 2, "bar": new} "
解决方案1:三重引号(
“”“
) 如@mgosk所述

s""" {"foo" : 2, "bar": $registerStatus} """
解决方案2:JSON库
看起来您希望创建JSON输出。对于该用例,使用字符串插值不是首选解决方案。有许多库,例如JSON4s,允许您使用类型安全的大小写类,然后将其呈现为JSON字符串。Scala is中的字符串插值不适用于使用
\
.Y转义对于特殊字符,您可以使用

val mAPRegisterResponseMessage = s"""{" 'type' ": "ap_register_response", "register_status": $registerStatus }"""

一些背景。看起来它不会被修复。这会用它的值替换$registerStatus吗?我想通过使用三重引号,所有的字符串替换都会丢失。让我试试看。字符串替换应该可以。只是不要使用反斜杠字符Yes。这是我要尝试的下一步。但这是一个真正的黑客代码,我认为它会很快工作,但它需要更多的时间来完成这个简单的格式(:-我会说运气不好:(在过去六年中从未在这个问题上运行过)使用scala.JSON4s是一个坚实的起点。