如何在xtend中的字符串中嵌入新行字符?

时间:2012-09-18 09:18:09

标签: xtext xtend

我在xtend中的JvmModelinferrer中生成一个类字段:

val exp = NodeModelUtils::getNode(rule.expression);
members+=rule.toField("text",rule.newTypeRef('java.lang.String'))[
                            ^static = true
                            val Procedure1<ITreeAppendable> b = [
                                 append('''"«exp.text.replace('"','').replaceAll("\n"," \\n ")»"''')
                            ]
                            initializer = b
                            setFinal(true)
                            setVisibility(JvmVisibility::PUBLIC)
                        ]

鉴于最初的exp.text是

'a
 b'

我希望生成的字段看起来像这样:

String text = "a \n b";

但它看起来像这样:

String text = "a n b";

在那里,好像我根本不替换换行符,然后我得到:

String text = "a
               b";

当然没有编译。问题似乎是xtend正在评估java字符串,所以即使“\ n”在java中编译为“\ n”,在xtend中它的计算结果为“n”

如何让xtend不评估\ n,以便在生成的java字符串中保留它?

1 个答案:

答案 0 :(得分:0)

原来你需要替换为“\\\\ n”,因为你写的源代码也会通过词法分析器,反斜杠需要再一次逃脱。

由Vlad Dumitrescu提供