В Java у меня есть File-Name-String. Там я хочу заменить все незаконные символы на "_", но не a-z
, 0-9
, -
, .
и _
Я пробовал следующий код: Но это не сработало!
myString = myString.replaceAll("[\\W][^\\.][^-][^_]", "_");
В Java у меня есть File-Name-String. Там я хочу заменить все незаконные символы на "_", но не a-z
, 0-9
, -
, .
и _
Я пробовал следующий код: Но это не сработало!
myString = myString.replaceAll("[\\W][^\\.][^-][^_]", "_");
Вам нужно заменить все, кроме [a-zA-Z0-9.-]
.
^
в скобках означает "NOT".
myString = myString.replaceAll("[^a-zA-Z0-9\\.\\-]", "_");
Держите его простым.
myString = myString.replaceAll("[^a-zA-Z0-9.-]", "_");
Если вы ищете опции на платформе Windows, вы можете попробовать ниже, чтобы использовать все допустимые символы, отличные от "\/: *?" < > | "в имени файла.
fileName = fileName.replaceAll("[\\\\/:*?\"<>|]", "_");
Еще проще
myString = myString.replaceAll("[^\\w.-]", "_");
Предопределенные классы символов:
\w
Символ слова: [a-zA-Z_0-9]
Я знаю, что здесь уже были некоторые ответы, но я хотел бы указать, что мне пришлось немного изменить данные предложения.
filename.matches("^.*[^a-zA-Z0-9._-].*$")
Это то, что я должен был использовать для .matches в Java, чтобы получить желаемые результаты. Я не уверен, что это на 100% правильно, но так оно и работает для меня, оно вернет true, если оно встретило любой символ, отличный от az AZ 0-9 (.) (_) И (-).
Я хотел бы знать, есть ли какие-то недостатки в моей логике здесь.
В предыдущих ответах я видел некоторое обсуждение того, что следует или не следует избегать. В этом примере я ушел, не ускользая от чего-либо, но вы должны избегать символа минус (-), чтобы быть в безопасности, поскольку он "сломает" ваше выражение, если оно не находится в конце списка. Символ (.) Точки не должен быть экранирован в квадратных скобках ([]), это казалось бы, но это не повредит вам, если вы избежите его.
Подробнее см. Java Шаблоны.