Dart 位置や範囲を指定して文字列を抽出する

Dart 位置や範囲を指定して文字列を抽出する

Dartで、位置や範囲を指定して文字列を抽出するコードを記述してます。「 substring 」を使用して開始位置と終了位置を指定することで確認できます。

環境

  • OS windows11 home
  • Dart 2.18.1

位置や範囲を指定して文字列を抽出

位置や範囲を指定して文字列を抽出するには、「 substring 」を使用します。

文字列.substring(開始位置)
※ 開始位置は「0」

文字列.substring(開始位置,終了位置)
※ 終了位置は未満

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

void main() {

  String str = 'あいうえお';

  print(str.substring(0)); // あいうえお
  print(str.substring(1)); // いうえお
  print(str.substring(2)); // うえお
  print(str.substring(3)); // えお
  print(str.substring(4)); // お

  print(str.substring(0,2)); // あい
  print(str.substring(1,2)); // い
  print(str.substring(2,4)); // うえ

}

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

開始位置は範囲を1つを超えると何も取得されませんが、そのほかはエラーとなります。

void main() {

  String str = 'あいうえお';

  print(str.substring(5)); //

 print(str.substring(10)); 

}

Unhandled exception:
RangeError (start): Invalid value: Not in inclusive range 0..5: 10
#0      RangeError.checkValidRange (dart:core/errors.dart:358:7)
#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)

サロゲートペア

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

void main() {

  String str = '😨😸😹😱🙊';

  print(str.substring(0)); // 😨😸😹😱🙊
  print(str.substring(1)); // �😸😹😱🙊
  print(str.substring(2)); // 😹😱🙊
  print(str.substring(3)); // �😹😱🙊
  print(str.substring(4)); // 😹😱🙊

}

実行結果