2015-06-25 4 views
1
private static void isValidName(String[] filename){ 
    FileSystem fs = FileSystems.getDefault(); 
    System.out.println(fs); 

    String pattern = ("^[\\w&[^?\\\\/. ]]+?\\.*[\\w&[^?\\\\/. ]]+$");    

    for (String s: filename) { 
     //System.out.println(s.matches(pattern)); 
     if (s.matches(pattern)==false){ 

      System.out.println(s.matches(pattern)); 

     } 
    } 

Теперь я называю эту функцию:Как изменить недопустимые символы на допустимые символы в Java?

String[] name2={"valami.txt."}; 
isValidName(name2); 

Как я могу заменить недопустимые символы в if(s.matches(pattern)==false) с действительными персонажами?

Выход: false

+2

, пожалуйста, уточните пожалуйста. В чем проблема? Какие символы недопустимы? что ты хочешь делать? Если вы просто хотите заменить недопустимые символы на некоторые допустимые, вы можете использовать replaceAll, например, – vefthym

+1

. Я предполагаю, что это продолжение [этого вопроса SO] (http://stackoverflow.com/questions/31027805/how-can-i -Write-а-более-комплексно-регулярное_выражение-в-Java). Итак, как должна выглядеть замена? Символ '_' для всех недопустимых символов? –

+0

Не начинать с места "", не более одного "." , а не начинать с "." не заканчивается на "." не?/\:; в файле. А да stribizhev заменить на _ например. – kokoko

ответ

2

Вы можете использовать этот кусок кода, чтобы удалить/заменить недопустимые символы:

String[] bad = { 
    "foo.tar.gz", 
    " foo.txt", 
    "foo?", 
    "foo/", 
    "foo\\", 
    ".foo", 
    "foo." 
    }; 
    String remove_pattern = "^[ .]+|\\.+$|\\.(?=[^.]*\\.[^.]*$)|[?\\\\/:;]"; 
    for (String s: bad) { 
     System.out.println(s.replaceAll(remove_pattern, "_")); 
    } 

См IDEONE demo

Выход:

foo_tar.gz 
_foo.txt 
foo_ 
foo_ 
foo_ 
_foo 
foo_ 

REGEX содержит несколько альтернатив, соединенных с оператором чередования | для соответствия недопустимым символам.

  • ^[ .]+ - Матчи 1 или более ведущих пробелов или точек
  • \\.+$ - Матчи Финал ., 1 или более вхождений (изменение в [. ]+$, если вы планируете также заменять завершающие пробелы)
  • \\.(?=[^.]*\\.[^.]*$) - Соответствует . за которым следует необязательное количество символов и другая точка (таким образом, оставив последнюю точку в строке)
  • [?\\\\/:;] - Соответствует ?, \, /, : и ; буквально.
+0

replaceAll thats what i need ... thanks :) – kokoko

+0

okay, upvoted it – kokoko

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