Dart エラー「Unhandled exception:RangeError (start): Invalid value: Not in inclusive range x..x: xx」が発生した場合の対処法

Dart エラー「Unhandled exception:RangeError (start): Invalid value: Not in inclusive range x..x: xx」が発生した場合の対処法

Dartで、エラー「Unhandled exception:RangeError (start): Invalid value: Not in inclusive range x..x: xx」が発生した場合の対処法を記述してます。

環境

  • OS windows11 home
  • Dart 2.18.1

エラー全文

以下のコードで発生。

void main() {

  String str = 'abcdef';

  print(str.substring(2,7));

}

エラー全文

Unhandled exception:
RangeError (end): Invalid value: Not in inclusive range 2..6: 7
#0      RangeError.checkValidRange (dart:core/errors.dart:363:9)
#1      _StringBase.substring (dart:core-patch/string_patch.dart:400:27)
#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)

原因

「substring」に指定している範囲が、文字列の長さを超えているため

対処法

範囲を超えないように指定する

void main() {

  String str = 'abcdef';

  print(str.substring(2,5));

}

実行結果

その他のエラー

インデックス番号を指定して文字を抽出する場合も範囲を超えると同様のエラーが発生します。

void main() {

  String str = 'abcdef';

  print(str[10]);

}