こんにちは、以下のコードに問題があります (ファイルは File クラスのものです):
String[] fileNameSplit = file.getName().split(".");
String fileType = fileNameSplit[(fileNameSplit.length - 1)];
fileNameSplit が 0 であることを示唆する -1 で常に ArrayOutOfBoundsExecption をスローします。
私は何を間違っていますか?
これは、が「任意の文字」を受け入れるメタ文字.
であるためです。文字列のすべての文字を区切り文字として扱い、その内容全体を「食い尽くし」ます。
次のようにドットをエスケープします。
String[] fileNameSplit = file.getName().split("\\.");
または、次のように文字クラスを使用します。
String[] fileNameSplit = file.getName().split("[.]");
使用する\\.
String[] fileNameSplit = file.getName().split("\\.");
regex
とString
は互いにうまくいかないため、1 つ目はコンパイラにそれが正規表現で\
はないことを認識させるために使用する必要があり、2 つ目は Java コンパイラに文字どおりに解釈させるために使用する必要があります。dot(.)
\
\
メソッドの引数split
は正規表現であることに注意してください。正規表現では、ドットには特別な意味があります。つまり、任意の文字に一致します。
ドットをそのまま使用するには、エスケープする必要があります。
`String[] fileNameSplit = file.getName().split("\\.");`
メソッドのドキュメントsplit
。