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文字で返ってきます。
絵文字を含む場合の注意点 ⚠️
絵文字など一部の文字は、lengthで 2としてカウントされる 場合があります。
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 に変更してください。
※ 文字数カウンターをつけたい場合には、maxLengthをTextFieldに指定することで、自動的にテキストフィールドの下に表示されます。
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の基礎として非常によく使う処理なので、ぜひ覚えておきましょう。

コメント