Java で特定の文字と文字の間の文字列を取り出す

Java のコードで、Oracle の接続文字列 jdbc:oracle:thin:@127.0.0.1:1521:oracle からホスト部分 127.0.0.1 を取得したい。

// 接続先 URL : 実際はこれを引数に受け取るイメージ
String str = "jdbc:oracle:thin:@127.0.0.1:1521:oracle";

final String _prefix = "jdbc:oracle:thin:@";
final int _preIdx = str.indexOf(_prefix) + _prefix.length();

final String suffix = ":1521:oracle";
final int _sufIdx = str.indexOf(_suffix);

System.out.println(str.substring(_preIdx, _sufIdx)); // "127:0.0.1"

String#indexOf() は、引数と一致する文字列があった場合、最初の登場位置を返すので、変数 str の場合、0 が返される。

そこから後で String#substring() でズラす分、つまり indexOf() の引数とした文字列自体の長さを String#length() で取得して足してやる。

これを substring() の第1引数、開始位置に指定すれば、thin:@ の次の 1 (27...) からの文字列が取得できる。

一方、substring() の第2引数とする終了位置については、indexOf() で取得した最初の登場位置をそのまま指定してあげれば OK。