我想在字符串中附加双[RoutePrefix("{cultureName}/store-locator")]
[HandleCulture(cultureName)]
public class StoreController : Controller
{ //controller }
,我尝试了以下代码,但没有得到预期的输出。
\\
输入:
String c= "edX-NYIF+CR.5x";
Pattern pt = Pattern.compile("[^a-zA-Z0-9]");
Matcher match= pt.matcher(c);
while(match.find())
{
String s= match.group();
c=c.replace("\\+", "\\\\"+"+");
// c=c.replaceAll("-", "-\\");
// c=c.replaceAll("\\.", ".\\");
}
预期输出:
edX-NYIF+CR.5x
答案 0 :(得分:2)
请注意,您可以直接使用String#replaceAll
来匹配多个子字符串并将其替换为您选择的正则表达式。另外,String#replace
不接受正则表达式,因此您的c=c.replace("\\+", "\\\\"+"+");
无法正常工作。
您可以使用
String c = "edX-NYIF+CR.5x";
System.out.println(c.replaceAll("[^a-zA-Z0-9]", "\\\\\\\\$0"));
[^a-zA-Z0-9]
(或"\\P{Alnum}"
)将匹配除字母或数字之外的任何字符,然后"\\\\\\\\$0"
(= \\\\$0
文字字符串)将其替换为匹配项前面加上2个文字反斜杠。请注意,文字反斜杠(在Java字符串文字中使用两个连续的反斜杠指定)是特殊的regex转义字符,必须将其加倍以指定将放入结果字符串中的单个反斜杠。
如果您对反斜杠感到困惑,并且实际上想在输出中获得单反斜杠,请从替换模式.replaceAll("[^a-zA-Z0-9]", "\\\\$0")
中删除4个反斜杠。