我正在寻找一个代替
的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
答案 0 :(得分:4)
fileName.replaceAll("[/|\\|..|:|]","")
该正则表达式是可疑的 - 它将删除所有出现的字符/
,|
,.
和:
,我怀疑这是你的想法。尝试更像这样的东西:
fileName.replaceAll("/|\\\\|:|\\.\\.","")
反斜杠是Java正则表达式中的一个噩梦,因为你必须在字符串文字中加倍它们,然后在正则表达式中再次加倍它们(所以你需要\\\\
来匹配一个反斜杠)。此外,点本身在正则表达式中是特殊的(匹配任何单个字符),因此要匹配文字点,您需要正则表达式\.
,这意味着Java字符串文字\\.
答案 1 :(得分:0)
假设您在删除double \时遇到问题(因为通过查看不起作用的表达式),您应将其更改为:
fileName = fileName.replaceAll("[/\\\\.:]","");