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

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

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

環境

  • OS windows11 home
  • Dart 2.18.6

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

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

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

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

void main() {

  String str = 'abcde';

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

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

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

void main() {

  String str = 'abcde';

  print(str.indexOf('f')); // -1
  print(str.indexOf('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 = 'abcabc';

  print(str.indexOf('a',1)); // 3
  print(str.indexOf('b',1)); // 1
  print(str.indexOf('ab',1)); // 3
  
}

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

void main() {

  String str = 'abcabc';

  print(str.indexOf('a',7));
  
}

Unhandled exception:
RangeError (start): Invalid value: Not in inclusive range 0..6: 7
#0      _StringBase.indexOf (dart:core-patch/string_patch.dart:353:7)
#1      String.indexOf (dart:core-patch/string_patch.dart:1088:18)
#2      main (file:///c:/sample/main.dart:5:13)
#3      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#4      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:192:12)