Java replaceAll替换特殊字符

时间:2014-01-23 15:24:59

标签: java

我正在寻找一个代替

的java片段
 "..", "/" or "\" or ":" - FileSeperator characters with
 "" 

在从UI传递的fileName属性中。这应该是OS独立的。 此外,我不想删除“单点”,只有“两个点”

目前我写了一个片段

private static void filter(){
    // should not remove the Single Dot
    String fileName = "/user/../142552/ReportFile.txt"      
    fileName = fileName.replaceAll("[/|\\|..|:|]","");
    System.out.println("fileName " + fileName); 
}

输出

fileName user142552ReportFiletxt

预期产出

fileName user142552ReportFile.txt

2 个答案:

答案 0 :(得分:4)

fileName.replaceAll("[/|\\|..|:|]","")

该正则表达式是可疑的 - 它将删除所有出现的字符/|.:,我怀疑这是你的想法。尝试更像这样的东西:

fileName.replaceAll("/|\\\\|:|\\.\\.","")

反斜杠是Java正则表达式中的一个噩梦,因为你必须在字符串文字中加倍它们,然后在正则表达式中再次加倍它们(所以你需要\\\\来匹配一个反斜杠)。此外,点本身在正则表达式中是特殊的(匹配任何单个字符),因此要匹配文字点,您需要正则表达式\.,这意味着Java字符串文字\\.

答案 1 :(得分:0)

假设您在删除double \时遇到问题(因为通过查看不起作用的表达式),您应将其更改为:

fileName = fileName.replaceAll("[/\\\\.:]","");