Java では、split() メソッドを使用して、指定された区切り文字に基づいて文字列を部分文字列に分割します。ただし、リテラルのドット文字 '.' で文字列を分割しようとすると、ArrayIndexOutOfBoundsException がスローされる場合があります。
この問題を説明するには、次のコードを考えてみましょう。
String filename = "D:/some folder/001.docx"; String extensionRemoved = filename.split(".")[0];
上記のコードの目的は、ファイル名をドットで分割してファイル拡張子を削除することです。ただし、このコードを実行すると例外が発生します。
逆に、次のコードは正しく動作します。
String driveLetter = filename.split("/")[0];
これは、split() メソッドが '.' を解釈するためです。文字列内の任意の文字と一致するワイルドカード文字として使用します。リテラルのドットで分割するには、バックスラッシュを使用してエスケープする必要があります。
String extensionRemoved = filename.split("\.")[0];
ドットをエスケープすることで、ワイルドカードではなくリテラル文字で分割したいことを示します。バックスラッシュ文字自体が正規表現の特殊文字であるため、別のバックスラッシュを使用してエスケープする必要があることに注意することが重要です。
さらに、ドットで分割する場合は、次のようなエッジ ケースを考慮することが重要です。ファイル名が空であるか、ドットのみで構成されています。 Split() メソッドの制限パラメータを使用せずにこのような文字列を分割しようとすると、ArrayIndexOutOfBoundsException が発生する可能性があります。これを防ぐには、limit パラメータに負の値を使用します。
String extensionRemoved = filename.split("\.", -1)[0];
limit を負の値に設定すると、結果の配列から末尾の空白が削除されなくなり、常に有効な値が得られるようになります。空の文字列や単一文字の文字列でもインデックスを作成します。
以上が区切り文字としてドット (.) を使用して Java 文字列を正しく分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。