2016-08-16 3 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を追加すると、のように、2番目のバックスラッシュの場合は閉じられていない文字リテラルというエラーが発生します。 私は何が間違っていますか?あらゆる手掛かりが役立ちます。

+0

一部の背景https://issues.scala-lang.org/browse/SI-6476。それは修正されないようです。 –

答えて

2

あなたはトリプル引用符を使用することができます

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} " 
+0

これは$ registerStatusをその値で置き換えますか?三重引用符を使用すると、すべての文字列の置換が失われると私は考えていました。試してみましょう。 – vishal

+0

文字列の置換は正常に動作するはずです。バックスラッシュ文字 – mgosk

0

解決方法1:トリプルクォート("""

を としてすでに@mgosk

s""" {"foo" : 2, "bar": $registerStatus} """ 
で述べ

だからlution 2:JSONライブラリ

JSON出力を作成するようです。文字列補間を使用しているusecaseは、望ましい解決策ではありません。たとえば、JSON4s http://json4s.org/のようなライブラリがあり、型保証されたケースクラスを使用してこれをJSON文字列としてレンダリングすることができます。

+0

はいを​​使用しないでください。それが私が試みる次のステップです。しかし、これは本当にハックコードだと思っていましたが、これは簡単なフォーマットに必要な時間がかかっていました(: - – vishal

+0

私は不運を言うでしょう:(過去6年間スケーラを実行したことはありませんでした。これは確かな出発点です。 –

0

\を使用して文字列補間がうまく動作しません。特殊文字の場合は"""を使用できます。

val mAPRegisterResponseMessage = s"""{" 'type' ": "ap_register_response", "register_status": $registerStatus }""" 
関連する問題