1

こんにちは、以下のコードに問題があります (ファイルは File クラスのものです):

String[] fileNameSplit = file.getName().split(".");
String fileType = fileNameSplit[(fileNameSplit.length - 1)];

fileNameSplit が 0 であることを示唆する -1 で常に ArrayOutOfBoundsExecption をスローします。

私は何を間違っていますか?

4

3 に答える 3

5

これは、が「任意の文字」を受け入れるメタ文字.であるためです。文字列のすべての文字を区切り文字として扱い、その内容全体を「食い尽くし」ます。

次のようにドットをエスケープします。

String[] fileNameSplit = file.getName().split("\\.");

または、次のように文字クラスを使用します。

String[] fileNameSplit = file.getName().split("[.]");
于 2012-10-01T16:29:38.393 に答える
1

使用する\\.

String[] fileNameSplit = file.getName().split("\\.");

regexStringは互いにうまくいかないため、1 つ目はコンパイラにそれが正規表現で\はないことを認識させるために使用する必要があり、2 つ目は Java コンパイラに文字どおりに解釈させるために使用する必要があります。dot(.)\\

于 2012-10-01T16:29:08.077 に答える
1

メソッドの引数splitは正規表現であることに注意してください。正規表現では、ドットには特別な意味があります。つまり、任意の文字に一致します。

ドットをそのまま使用するには、エスケープする必要があります。

`String[] fileNameSplit = file.getName().split("\\.");`

メソッドのドキュメントsplit

于 2012-10-01T16:29:30.640 に答える