Подтвердить что ты не робот

Замена незаконного символа в файлеName

В Java у меня есть File-Name-String. Там я хочу заменить все незаконные символы на "_", но не a-z, 0-9, -, . и _

Я пробовал следующий код: Но это не сработало!

myString = myString.replaceAll("[\\W][^\\.][^-][^_]", "_");
4b9b3361

Ответ 1

Вам нужно заменить все, кроме [a-zA-Z0-9.-]. ^ в скобках означает "NOT".

myString = myString.replaceAll("[^a-zA-Z0-9\\.\\-]", "_");

Ответ 2

Держите его простым.

myString = myString.replaceAll("[^a-zA-Z0-9.-]", "_");

http://ideone.com/TINsr4

Ответ 3

Если вы ищете опции на платформе Windows, вы можете попробовать ниже, чтобы использовать все допустимые символы, отличные от "\/: *?" < > | "в имени файла.

fileName = fileName.replaceAll("[\\\\/:*?\"<>|]", "_");

Ответ 4

Еще проще

myString = myString.replaceAll("[^\\w.-]", "_");

Предопределенные классы символов:

  • \w Символ слова: [a-zA-Z_0-9]

Ответ 5

Я знаю, что здесь уже были некоторые ответы, но я хотел бы указать, что мне пришлось немного изменить данные предложения.

filename.matches("^.*[^a-zA-Z0-9._-].*$")

Это то, что я должен был использовать для .matches в Java, чтобы получить желаемые результаты. Я не уверен, что это на 100% правильно, но так оно и работает для меня, оно вернет true, если оно встретило любой символ, отличный от az AZ 0-9 (.) (_) И (-).

Я хотел бы знать, есть ли какие-то недостатки в моей логике здесь.

В предыдущих ответах я видел некоторое обсуждение того, что следует или не следует избегать. В этом примере я ушел, не ускользая от чего-либо, но вы должны избегать символа минус (-), чтобы быть в безопасности, поскольку он "сломает" ваше выражение, если оно не находится в конце списка. Символ (.) Точки не должен быть экранирован в квадратных скобках ([]), это казалось бы, но это не повредит вам, если вы избежите его.

Подробнее см. Java Шаблоны.