私はfilename
と呼ばれるString
を持っている:ある期間に分割すると二重のバックスラッシュが必要なのはなぜですか?
filename = "z_cams_c_ecmf_20170217000000_prod_fc_pl_015_aermr04.nc";
私は変数名aermr04.nc
を取得するためにfilename
を分割しようとすると、私は次のことを試してみました:
String varibleName = filename.split("_")[9].split(".")[0];
上記のコード行がIndexOutOfBoundsException
をスローします。
なぜですか?
私はそれを使って作業をけん引取得することができます。
String varibleName = filename.split("_")[9].split("\\.")[0];
しかし、それは私が、このような些細なタスクと周りいじる必要があることを、むしろ愚かなようだ...なぜ第二の例の作品
任意のアイデアを?そのような構文の背後にある理由は何ですか?
として
"."
正規表現をエスケープする必要がある期間そのため '.'、正規表現では、「任意の文字」を意味します。したがって、リテラル期間は、エスケープする必要があります(例:バックスラッシュ)。しかし、文字列中のバックスラッシュ '\'はエスケープする必要があるので、\ "。\"となります。 – AntonH@yshavitハ、そうです。私はそれに気をつけてください:) – AntonH
正規表現なしで、または 'String varibleName = filename.substring(filename.lastIndexOf( '_')、filename.lastIndexOf( '。')を使用して、不要な文字列と配列をすべて作成することができます。 )) ''(あなたの文字列中の最後の '_'と' .')を仮定します。 –