Dartで文字列の長さを取得する方法!【Flutter対応】

Dart(Flutter)で文字列の長さを取得する方法について書いています。

下記のようなケースで文字列の長さを取得したいときがあります。

  • 入力フォームで文字数制限をかけたい
  • パスワードの長さをチェックしたい
  • UI上で文字数カウントを表示したい
  • バリデーション処理を行いたい

といったケースです。

この記事では、Dartで文字列の長さを取得する基本的な方法から、Flutterでの実用例などを書いています。
※ 載せているコードはFlutter 3.29.3 / Dart 3.7.2で動作を確認しています。

Dartで文字列の長さを取得する基本方法(length)

Dartでは、Stringクラスのlengthプロパティを使うことで、文字列の長さを簡単に取得できます。

基本構文

String text = 'Hello';
print(text.length); // 5

text変数に入れた文字列の長さを取得し、出力しています。
lengthはプロパティなので、メソッド呼び出し「()」は不要です。

数字・英字・記号を含む場合の文字数

英数字や記号は、思った通りの文字数が取得されます。

String text = 'Dart123!';
print(text.length); // 8

Dart123!」で8が取得できます。
この場合も特別な処理は不要です。

日本語(マルチバイト文字)の文字数はどうなる?

Dartのlengthは、UTF-16コードユニット数を返します。
そのため、日本語を含む場合でも、基本的には「見た目の文字数」と同じ結果になることが多いです。

String text = 'こんにちは';
print(text.length); // 5

日本語の「こんにちは」は、正確に5文字で返ってきます。

絵文字を含む場合の注意点 ⚠️

絵文字など一部の文字は、length2としてカウントされる 場合があります。

String text = '😀';
print(text.length); // 2

これはDartの仕様なので、
ユーザーが入力する文字数を正確にカウントしたい場合は注意が必要です。

見た目どおりの文字数を取得したい場合(runes)

絵文字を含めて「見た目どおりの文字数」を取得したい場合は、runesを使います。

String text = '😀';
print(text.runes.length); // 1

日本語 + 絵文字でも正確にカウントできます。

String text = 'こんにちは😀';
print(text.runes.length); // 6

Flutterでの実用例:TextFieldの入力文字数をカウントする

Flutterでは、TextFieldと組み合わせて文字数を表示することがよくあります。

サンプルコード

このサンプルコードは、文字数をカウントして、テキストフィールドの下に出しています。

※ 絵文字対応が必要な場合は、inputText.runes.length に変更してください。
※ 文字数カウンターをつけたい場合には、maxLengthTextFieldに指定することで、自動的にテキストフィールドの下に表示されます。

import 'package:flutter/material.dart';

class StringLengthSample extends StatefulWidget {
  const StringLengthSample({super.key});

  @override
  State<StringLengthSample> createState() => _StringLengthSampleState();
}

class _StringLengthSampleState extends State<StringLengthSample> {
  String inputText = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('文字数カウント')),
      body: Padding(
        padding: const EdgeInsets.all(16),
        child: Column(
          children: [
            TextField(
              onChanged: (value) {
                setState(() {
                  inputText = value;
                });
              },
            ),
            const SizedBox(height: 8),
            Text('文字数: ${inputText.length}'),
          ],
        ),
      ),
    );
  }
}

TextFieldウィジェットの入力値の変更時(onChanged)にinputText変数に入力した文字列を保持しています。
保持した文字列の文字数をTextウィジェットで表示しています。

文字数制限でバリデーションする例

if (text.length > 20) {
  print('20文字以内で入力してください');
}

文字列数を取得することでバリデーションに使えます。
Flutterのフォームバリデーションでも、このようにバリデーション可能です。

ここでは20文字以上だったら、「20文字以内で入力してください」と出力しています。

まとめ

今回はDart(Flutter)で文字列の長さを取得する方法について確認しました。

  • Dartで文字列の長さを取得するにはlengthを使う
  • 日本語は基本的に問題なし
  • 絵文字を含む場合はrunes.lengthに注意
  • Flutterでは入力フォームやバリデーションで頻繁に使われる

Dart・Flutterの基礎として非常によく使う処理なので、ぜひ覚えておきましょう。

コメント