Javaでは、File-Name-Stringがあります。そこで、すべての不正な文字を「_」に置き換えたいのですがa-z
、、、、および0-9
-
.
_
私は次のコードを試しました:しかし、これはうまくいきませんでした!
myString = myString.replaceAll("[\\W][^\\.][^-][^_]", "_");
を除くすべてを置き換える必要があります[a-zA-Z0-9.-]
。括弧内は^
「NOT」を表します。
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._-].*$")
これは、目的の結果を得るためにJavaの.matchesに使用する必要があったものです。これが100%正しいかどうかはわかりませんが、これが私にとってどのように機能したか、az AZ 0-9(。)(_)および(-)以外の文字に遭遇した場合はtrueを返します。
ここで私のロジックに欠陥があるかどうか知りたいです。
以前の回答では、何を回避すべきか、または回避すべきでないかについての議論を見てきました。この例では、何もエスケープせずに逃げましたが、リストの最後にない限り、式が「壊れて」しまうため、安全のために(-)マイナス文字をエスケープする必要があります。(。)ドット文字は、([])中括弧内でエスケープする必要はありませんが、エスケープしても問題はありません。
詳細については、 Javaパターンを参照してください。
[A-Za-z0-9]のようなもの以外のものを使用したい場合は、MSの命名規則を確認し、「...整数表現が1から31の範囲にある文字...を除外することを忘れないでください。 "。