Dartで文字列を分割する方法!(split)【Flutter対応】

Dart(Flutter)で文字列を分割する方法について書いています。
文字列の処理が必要になるのは、例えば、次のようなケースです。

  • カンマ区切りの文字列を配列(List)に変換したい
  • URLやファイルパスを分解したい
  • 入力フォームの値を分割して処理したい
  • APIレスポンスの文字列を加工したい

この記事では、Dartで文字列を分割する方法を中心に解説します。
※ 載せているコードはFlutter 3.29.3 / Dart 3.7.2で動作を確認しています。

Dartで文字列を分割する基本(split)

Dartで文字列を分割するには、String.split()メソッドを使います。

基本構文

String.split(Pattern pattern)

指定した区切り文字(pattern)で文字列を分割し、リスト(List<String>)を返します。

文字列を特定の文字で分割する

split()メソッドを利用したサンプルコードです。

カンマ区切りで分割する例

void main() {
  String text = 'apple,banana,orange';
  List<String> result = text.split(',');

  print(result);
}

text変数にカンマ区切りの文字列が入っています。
このtext変数からsplitメソッドを呼び出して、文字列を分割しています。

,」を渡すことで、カンマ区切りで分割されます。

実行結果

実行すると、下記のように出力されました。

[apple, banana, orange]

カンマ区切りのリストになっています。
CSV形式や、設定値の分割などでよく使われるパターンです。

スペース(空白)で文字列を分割する

スペースで文字列を分割する場合も同様に
split()メソッドに対して「’ ‘」を渡します。

void main() {
  String text = 'Flutter Dart Programming';
  List<String> result = text.split(' ');

  print(result);
}

実行結果

実行すると、下記のようにスペースで分割されて、リストになっていることが確認できます。

[Flutter, Dart, Programming]

単語ごとに分割したい場合に便利です。

改行で文字列を分割する

改行で文字列を分割したいときです。
複数行のテキストを行単位で処理したい場合は、改行コードを渡すことで分割します。

void main() {
  String text = 'line1\nline2\nline3';
  List<String> result = text.split('\n');

  print(result);
}

実行結果

渡した改行コードで分割され、リストが返ってきました。

[line1, line2, line3]

Flutterでテキスト入力やログを扱う際に使われます。

正規表現を使って文字列を分割する

split()は正規表現(RegExp)も指定できます。

複数の区切り文字で分割する例

正規表現を指定して、分割する例です。

void main() {
  String text = 'apple,banana orange';
  List<String> result = text.split(RegExp('[, ]'));

  print(result);
}

text変数には、カンマとスペースが入った文字列が指定されています。
次の行でRegExpを使って、正規表現でカンマとスペースを指定しています。

これで、カンマとスペースで分割することができます。

実行結果

[apple, banana, orange]

カンマやスペースなど、複数の区切り文字を使って、まとめて処理したい場合に便利です。

区切り文字が存在しない場合

区切り文字が含まれていない場合でも、エラーにはならず元の文字列が1要素のListとして返ります。

void main() {
  String text = 'flutter';
  List<String> result = text.split(',');

  print(result);
}

このコードではカンマ区切りで分割しようとしていますが
元の文字列にカンマが含まれていません。

結果、下記のように1要素だけがリストとして返ってきます。

[flutter]

Flutterでの使用例(UIで分割結果を表示)

Flutterでの使用例です。
カンマ区切りで文字列分割して、内容をListViewに表示しています。

import 'package:flutter/material.dart';

class SplitSamplePage extends StatelessWidget {
  const SplitSamplePage({super.key});

  @override
  Widget build(BuildContext context) {
    String text = 'red,green,blue';
    List<String> colors = text.split(',');

    return Scaffold(
      appBar: AppBar(title: const Text('文字列分割サンプル')),
      body: ListView(
        children: colors.map((c) => ListTile(title: Text(c))).toList(),
      ),
    );
  }
}

文字列分割でよくある注意点

文字列分割する際の注意点です。

空文字が含まれる場合

空要素が含まれる場合は、意図しない分割になる場合があります。

String text = 'apple,,banana';
print(text.split(','));

上記のコードを実行すると、下記のように空要素もリストに含まれます。

[apple, , banana]

不要な空要素が含まれる場合は、where を使って除外するとよいです。

List<String> result =
    text.split(',').where((e) => e.isNotEmpty).toList();

上記のようにwhereで除外を書いておくことで、空要素を除外して返してくれます。

まとめ

Dartで文字列を分割するには、split()メソッドを使います。

  • split(',') で簡単に分割できる
  • 正規表現(RegExp)にも対応
  • Flutterでもそのまま使える
  • 空要素には注意が必要

文字列操作は、フォーム処理・API連携・UI表示など幅広い場面で使われるため、ぜひ覚えておきましょう。

コメント