Dart 指定した文字列が最後に見つかった位置を取得する

Dart 指定した文字列が最後に見つかった位置を取得する

Dartで、指定した文字列が最後に見つかった位置を取得するコードを記述してます。「 lastIndexOf 」に位置を取得したい文字列を指定することで可能です。

環境

  • OS windows11 home
  • Dart 2.18.6

指定した文字列が最後に見つかった位置を取得

指定した文字列が最後に見つかった位置を取得するには、「 lastIndexOf 」を使用します。

文字列.lastIndexOf(文字列)
※ 開始位置は「0」から、値が存在しない場合は「-1」が返ります

実際に、使用してみます。

void main() {

  String str = 'abcabc';

  print(str.lastIndexOf('a')); // 3
  print(str.lastIndexOf('b')); // 4
  print(str.lastIndexOf('ab')); // 3
  
}

実行結果を見ると、取得できていることが確認できます。

存在しない値を指定すると「-1」が返ります。

void main() {

  String str = 'abcabc';

  print(str.lastIndexOf('f')); // -1
  print(str.lastIndexOf('abf')); // -1

}

サロゲートペア

通常の2バイトで1文字で表すところを、4バイトで1文字となるサロゲートペア文字の場合は、位置は倍になります。

void main() {

  String str = '😨😸😹😱🙊';

  print(str.indexOf('😨')); // 0
  print(str.indexOf('😸')); // 2
  print(str.indexOf('😹😱')); // 4

}

検索位置を指定

第二引数に、検索位置を指定することも可能です。
※指定した位置より前のみを検索します。

void main() {

  String str = 'abcabcabc';

  print(str.lastIndexOf('a',1)); // 0
  print(str.lastIndexOf('b',1)); // 1
  print(str.lastIndexOf('ab',1)); // 0
  
}

文字列の長さより開始位置が大きい場合はエラーとなります。

void main() {

  String str = 'abcabcabc';

  print(str.lastIndexOf('a',10));
  
}

Unhandled exception:
RangeError: Invalid value: Not in inclusive range 0..9: 10
#0      _StringBase.lastIndexOf (dart:core-patch/string_patch.dart:378:7)
#1      main (file:///c:/sample/main.dart:5:13)
#2      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)