2017-09-04 169 views
0

我需要更换一个字符串$achieved$,它应该是不区分大小写。因为有时从服务器的字符串我们得到$ACHIeved$,因此它应该忽略区分大小写。我使用下面的代码。替换忽略大小写

stringWithoutFormating.replace(Constant.PROGRAM_DETAILS_ENTRY_CONTENT_FIELDS.achieved, String.valueOf(achieved)); 

我与(?i)尝试,以及,但它不是工作。
可以将其与正则表达式来完成,如果是的话应该是什么正则表达式?

回答

0

首先,replace进行文字字符串替换,并且不接受一个正则表达式作为第一个参数。您需要使用replaceFirstreplaceAll。接下来,$是一种特殊的正则表达式字符(它匹配字符串的结尾),因此它必须转义。您可以使用Pattern.quote。所以,你可以使用

stringWithoutFormating = stringWithoutFormating.replaceAll("(?i)" + Pattern.quote(Constant.PROGRAM_DETAILS_ENTRY_CONTENT_FIELDS.achieved), String.valueOf(achieved).replace("$", "\\$")); 

这里,(?i)会让搜索不区分大小写,Pattern.quote(Constant.PROGRAM_DETAILS_ENTRY_CONTENT_FIELDS.achieved)会变成$achieved$\$achieved\$,然后更换会发生。关于更换执行.replace("$", "\\$")是必要的更换逃脱文字$