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'
}
}