2014-01-23 3 views
2

Ищу сниппета в Java, который заменяетJava replaceAll заменить специальные символы

"..", "/" or "\" or ":" - FileSeperator characters with 
"" 

в FileName собственность передается от пользовательского интерфейса. Это должно быть независимым от ОС. Кроме того, я не хочу, чтобы удалить "одну точку", только "две точки"

В настоящее время я написал фрагмент

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 
+3

Итак, каков ваш вопрос? Работает ли ваш код или нет? Если это не так, то объясните, в чем проблема. – Jesper

+1

Ваш метод успешно удаляет разделители с исходного ввода. user142552 - это результат, и я не понимаю, в чем смысл этого вывода, что вы будете с этим делать? Код – Juvanis

+0

должен удалить любые специальные символы из ввода. Пользователь не вводит ничего необычного, но только для того, чтобы не допустить доступа к файлу за пределами местоположения. – minil

ответ

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

Это регулярное выражение подозреваемого - это приведет к удалению всех вхождений символов /, |, . и :, что я сомневаюсь, что вы имел в виду. Попробуйте что-то больше, как это вместо:

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

Обратные косые кошмар в Java регулярных выражений, потому что вы в любом случае, чтобы удвоить их в строковых литералов, а затем дважды их снова в регулярных выражениях (так что вам нужно \\\\, чтобы соответствовать один обратная косая черта). Кроме того, точка сама по себе является особенной в регулярном выражении (соответствие любого один символ) так, чтобы соответствовать буквальной точке вам нужно регулярному выражение \., что означает строку Java буквального \\.

+0

Да, проблема была в regex. Спасибо за ввод. – minil

0

, предполагая, что у вас есть проблема с удалением double \ (потому что, глядя на ваше выражение t шляпа не будет работать), вы должны изменить его на:

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

«..» удаляет даже «.». (Single dot) – minil

+1

Заменено '[' с '(' now should work. – Ingo

Смежные вопросы