1. ホーム
  2. java

[解決済み] Java の文字列を "." で分割する (ドット) [重複] で分割

2022-03-21 04:39:48

質問

このコードの2行目は、なぜ ArrayIndexOutOfBoundsException ?

String filename = "D:/some folder/001.docx";
String extensionRemoved = filename.split(".")[0];

これが機能している間は

String driveLetter = filename.split("/")[0];

Java 7を使用しています。

解決方法を教えてください。

で分割する場合は、ドットをエスケープする必要があります。 リテラル のドットになります。

String extensionRemoved = filename.split("\\.")[0];

そうでなければ、正規表現で分割していることになります。 . これは、任意の文字という意味です。
正規表現でシングル・バックスラッシュを作成するために必要なダブル・バックスラッシュに注意してください。


を取得しています。 ArrayIndexOutOfBoundsException 入力文字列が単なるドットであるため、すなわち "." これは、ドットで分割すると空の配列が生成されるエッジケースです。 split(regex) は末尾の空白をすべて取り除きますが、ドットとドットを分割すると空白が2つしか残らないので、末尾の空白を取り除いた後は空の配列が残ります。

を取得しないようにするために ArrayIndexOutOfBoundsException のオーバーロード版を使ってください。 split(regex, limit) これは2番目のパラメータで、結果の配列のサイズ制限を指定します。このとき limit ネガティブ の場合、結果の配列から末尾の空白を削除する動作は無効となります。

".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]

つまり filename は単なるドット "." を呼び出します。 filename.split("\\.", -1)[0] を呼び出すと空白が返されますが filename.split("\\.")[0] を投げます。 ArrayIndexOutOfBoundsException .