【Flutter】charactersで文字操作

Flutter

charactersとは

characters パッケージは、ユーザーが認識する文字、つまり Unicode (拡張)グラフェメクラスタ としての文字列を扱うためのものです。
Dartの String クラスではなく、Characters クラスを使うことで、文字単位での操作が可能になります。これにより、合成文字や絵文字を分割してしまうリスクがなくなります。

characters | Dart package
String replacement with operations that are Unicode/grapheme cluster aware.

使い方

インストール

pubspec.yaml ファイルに以下の依存関係を追加します。

dependencies:
  characters: ^1.3.0

その後、コマンドラインで以下を実行します。

flutter pub get

基本的な使い方

Characters クラスを使用して文字列を操作する方法を紹介します。

Charactersクラスのインスタンス化

import 'package:characters/characters.dart';

void main() {
  String text = 'A ?? text in English';
  Characters characters = Characters(text);

  // Charactersオブジェクトを取得
  print(characters);
}

文字のアクセスと操作

Characters クラスでは、文字(グラフェメクラスタ)単位での操作が可能です。

void main() {
  Characters text = 'A ?? text in English'.characters;

  // 最初の文字を取得
  print(text.first); // 'A'

  // 最後の文字を取得
  print(text.last); // 'h'

  // 指定した範囲の文字を取得
  print(text.getRange(2, 6)); // '?? te'
}

特定の操作

Characters クラスには、String クラスに似た操作メソッドがありますが、インデックスやコードユニットではなく、文字単位で動作します。

文字の置換

void main() {
  Characters text = 'A ?? text in English'.characters;

  // 文字の置換
  Characters newText = text.replaceAll('text'.characters, 'string'.characters);
  print(newText); // 'A ?? string in English'
}

文字の検索

void main() {
  Characters text = 'A ?? text in English'.characters;

  // 文字の検索
  bool startsWithA = text.startsWith('A'.characters);
  print(startsWithA); // true

  bool containsFlag = text.contains('??'.characters);
  print(containsFlag); // true
}

CharacterRangeの使用

CharacterRange を使用して文字範囲を操作することも可能です。

void main() {
  Characters text = 'A ?? text in English'.characters;

  // CharacterRangeを使用して操作
  CharacterRange range = text.findFirst('??'.characters);
  if (range != null && range.moveUntil('t'.characters)) {
    print(range.currentCharacters); // '?? te'
  }
}
タイトルとURLをコピーしました