60

Javaでは、File-Name-Stringがあります。そこで、すべての不正な文字を「_」に置き換えたいのですがa-z、、、、および0-9-._

私は次のコードを試しました:しかし、これはうまくいきませんでした!

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

6 に答える 6

110

を除くすべてを置き換える必要があります[a-zA-Z0-9.-]。括弧内は^「NOT」を表します。

myString = myString.replaceAll("[^a-zA-Z0-9\\.\\-]", "_");
于 2013-02-25T20:30:38.913 に答える
29

Windowsプラットフォームでオプションを探している場合は、以下の解決策を試して、ファイル名に「\ /:*?」<>|」以外のすべての有効な文字を使用できます。

fileName = fileName.replaceAll("[\\\\/:*?\"<>|]", "_");
于 2016-12-12T20:11:38.737 に答える
16

単純にする。

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

http://ideone.com/TINsr4

于 2013-02-25T20:31:08.740 に答える
12

さらにシンプル

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

事前定義された文字クラス:

  • \w 単語文字:[a-zA-Z_0-9]
于 2016-02-24T00:43:27.847 に答える
2

ここにはすでにいくつかの答えがあることは知っていますが、与えられた提案を少し変更しなければならなかったことを指摘したいと思います。

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

これは、目的の結果を得るためにJavaの.matchesに使用する必要があったものです。これが100%正しいかどうかはわかりませんが、これが私にとってどのように機能したか、az AZ 0-9(。)(_)および(-)以外の文字に遭遇した場合はtrueを返します。

ここで私のロジックに欠陥があるかどうか知りたいです。

以前の回答では、何を回避すべきか、または回避すべきでないかについての議論を見てきました。この例では、何もエスケープせずに逃げましたが、リストの最後にない限り、式が「壊れて」しまうため、安全のために(-)マイナス文字をエスケープする必要があります。(。)ドット文字は、([])中括弧内でエスケープする必要はありませんが、エスケープしても問題はありません。

詳細については、 Javaパターンを参照してください。

于 2015-08-24T13:32:41.207 に答える
0

[A-Za-z0-9]のようなもの以外のものを使用したい場合は、MSの命名規則を確認し、「...整数表現が1から31の範囲にある文字...を除外することを忘れないでください。 "。

于 2018-02-24T12:12:13.363 に答える