2016-03-30 7 views
1

私は、コードのこの部分を理解しようとしています:のJavaでReplaceAll()メソッド

for (File f : files) { 
    fileName = f.getName().toUpperCase().replaceAll("_\\d\\d\\d\\d_\\d\\d_\\d\\d_\\d\\d_\\d\\d", ""); 

    if (fileName.equals(tableName + ".XML")) { 
     returnFile = f; 
     break; 
    } 
} 

と私はこの部分で立ち往生しています:replaceAll("_\\d\\d\\d\\d_\\d\\d_\\d\\d_\\d\\d_\\d\\d", "")

限り、私はそれから何かを削除しようとしている知っています名前(おそらくアンダースコア「_」)でも正確には_\\d\\d\\d\\d_\\d\\d_\\d\\d_\\d\\d_\\d\\d

誰か説明してください。限り、私は名前(多分アンダースコア "_")から何かを削除しようとしているが、まさにです\ D \ D \ D \ dは \ D \ D_ \ D \ D_さを知っているよう

+5

正規表現について学んでください。 – SLaks

+0

このコードには2つの問題があります。 – jdv

+0

@jdvあなたが見ている2つの問題は何ですか? –

答えて

2

str.replaceAll("_\\d\\d\\d\\d_\\d\\d_\\d\\d_\\d\\d_\\d\\d", "")は、文字列strを取り、何も正規表現_\d\d\d\d_\d\d_\d\d_\d\d_\d\d(すなわち"")のすべての一致を置き換えます。 (その理由は、それが\\dに書き込まれていない\d\がエスケープされていることである。)この場合

\dは「数字」を意味します。だから、おそらく、それは文字列から日付/時刻を削除します。たとえば、str"screenshot_from_stackoverflow_2016_03_30_23_47.jpg"の場合は、replaceAllの後にscreenshot_from_stackoverflow.jpgになります。

正規表現の使い方、動作方法、およびできることについては、regular-expressions.infoなどで読むことをおすすめします。それはかなり包括的tutorialが利用可能です。

+0

実際には、 'replaceAll()の前に' toUpperCase() 'を実行しているので、実際には' SCREENSHOT_FROM_STACKOVERFLOW.JPG'になります。 ) '。 – user2004685

+0

@ user2004685質問で提供されている例では、はいです。 :)この答えは本当に 'replaceAll'部分をカバーしています。 –

+1

私はあなたを訂正していません。誰かが興味があるかどうかを一般的に理解するだけです。 :) – user2004685

1

\ D \ D_ \ D \ dは

それはこの形式_XXXX_XX_XX_XX_の桁に[0-9]と一致して""すなわち何でそれを置き換えますパターンです。例については

_7686_77_78_77_77 
_0123_65_58_56_12 

""であなたの文字列に置き換えられます。 D \

関連する問題