2016-08-16 77 views
1

我是scala新手,並試圖做一些字符串格式。斯卡拉字符串格式與插補S不工作

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之後,我得到一個錯誤,因爲第二個反斜槓爲未封閉字符文字。 我在做什麼錯?任何線索都會有所幫助。

+0

一些背景https://issues.scala-lang.org/browse/SI-6476。看起來它不會被修復。 –

回答

2

你可以使用三聯報價:

s""" {"foo" : 2, "bar": $registerStatus} """ 

斯卡拉控制檯:

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

scala> s""" {"foo" : 2, "bar": $registerStatus} """ 
res0: String = " {"foo" : 2, "bar": new} " 
+0

這會取代$ registerStatus它的值嗎?我在想,通過使用三重引號,所有的字符串替換將會丟失。讓我試試看。 – vishal

+0

字符串替換應該工作正常。只是不要使用反斜槓字符 – mgosk

0

解決方案1:三重引號("""

如已經@mgosk

s""" {"foo" : 2, "bar": $registerStatus} """ 
聲明

所以lution 2:JSON庫

它看起來像你想創建JSON輸出。對於使用字符串插值的用例不是首選解決方案。有許多類庫,例如JSON4s http://json4s.org/,它們允許您使用類型安全案例類,然後將其渲染爲JSON字符串

+0

是的。這是我要嘗試的下一步。但是,這是一個非常黑客的代碼,我認爲它會很快運行,但它需要更多的時間來完成這個簡單的格式化(: - – vishal

+0

我會說運氣不好:(在過去六年中從未在這個問題上跑過scala。JSON4s因爲這是一個堅實的起點。 –

0

字符串Scala中的插值不適用於使用\進行轉義。在特殊字符的情況下,您可以使用"""

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