注意:我不得不简化我的实际用例,以节省大量的背景故事。因此,如果您对这个问题的第一React是:* 你为什么要这么做 *,相信我,我只是需要
我尝试编写一个Groovy表达式,将字符串中出现的双引号(“"
“)替换为单引号(“'
“)。
// BEFORE: Replace my "double" quotes with 'single' quotes.
String toReplace = "Replace my \"double-quotes\" with 'single' quotes.";
// Wrong: compiler error
String replacerExpression = "toReplace.replace(""", "'");";
Binding binding = new Binding();
binding.setVariable("toReplace", toReplace);
GroovyShell shell = new GroovyShell(binding);
// AFTER: Replace my 'double' quotes with 'single' quotes.
String replacedString = (String)shell.evaluate(replacerExpression);
问题是,我在赋值replacerExpression
的地方得到了一个编译错误:
toReplace的标记““上出现语法错误。replace(“",{应为
我想这是因为我需要对包含双引号字符(“"”)的字符串进行转义,但由于它是字符串中的字符串,我不知道如何在这里正确地对它进行转义。
3条答案
按热度按时间cngwdvgl1#
您需要对此行中引号内的引号进行转义:
该字符串将计算两次:一次作为字符串文字,一次作为脚本。这意味着你必须用反斜杠转义它,然后再转义反斜杠。另外,如果你使用三重引号,嵌入的引号会更容易阅读。
请尝试以下操作(在groovy中):
在Java中,您必须使用反斜杠来转义所有引号和嵌入式反斜杠:
q3qa4bjr2#
使用三引号效果很好,但也可以使用单引号字符串指定双引号,使用双引号字符串指定单引号。
请考虑以下内容:
也就是说,在字符串文字求值之后,将在Groovy shell中求值:
如果这对眼睛来说太难了,用另一种风格(使用slashy字符串)替换上面的“关键行”:
np8igboo3#
请尝试使用regular expressions来解决这类问题,而不是为了解决引号的转义而绞尽脑汁。
我已经使用Groovy控制台建立了一个solution。请看看是否有帮助。