我在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字符串中保留它?
答案 0 :(得分:0)
原来你需要替换为“\\\\ n”,因为你写的源代码也会通过词法分析器,反斜杠需要再一次逃脱。
由Vlad Dumitrescu提供