先看代码:
String fname= "b[1].jpg";//当fname中含有正则的关键字符时,替代就无效了,b(1).jpg也是无效
String text= "file\\a.jpg|file\\b[1].jpg|file\\c.jpg";
text= text.replaceAll("file\\\\" + fname+ "[\\|]?", "");
System.out.println(text);
我想要替代text字符串的,含fname名字的字符串:file\fname 为空,当fname的值不为正则的关键字母时,替代正常,含有()、[]等时,就替换不了,怎么办呢?请高人指教。
当然了,fname是动态可变了,甚至为何值并不知道,这里只是测试实例,即答:fname= "b[1].jpg"改为:
fname= "b\\[1\\].jpg之类的不合要求。
------解决方案--------------------
这样吧
public static void main(String[] args) {
String fname = "b[1].jpg";
fname = fname.replace("[", "\\[").replace("]","\\]");
String text = "file\\a.jpg
------解决方案--------------------
file\\b[1].jpg
------解决方案--------------------
file\\c.jpg";
text = text.replaceAll("file\\\\" + fname + "\\
------解决方案--------------------
", "");
System.out.println(text);
}
------解决方案--------------------
或者直接用replace
text = text.replace("file\\" + fname + "
------解决方案--------------------
", "");
不过这样有多个的话只能替换掉一个
------解决方案--------------------
你实际上市想把fname当成正则表达式去替换,这样的话,你就必须把所有的正则元字符替换成加\进行转义的。要么你就补用正则,用
------解决方案--------------------
分割你这个字符串,遍历,进行重新拼接
------解决方案--------------------
老打错别字
------解决方案--------------------
也没几行代码吧,拆分组装一下
------解决方案--------------------
可以用这样一句话把你要替换元字符给替换掉
fname = fname.replaceAll("([\\[\\]()])", "\\\\$1");
------解决方案--------------------
直接replaceALL,没必要正则