String の基本(リテラル / 文字列補間 / エスケープ)
『Dart』の文字列は `String` 型で表され、シングルクォートまたはダブルクォートで囲んで記述します。`$変数名` や `${式}` を使った文字列補間(String Interpolation)が標準機能として備わっており、文字列の連結をすっきりと書けます。また、三重クォート(`'''` または `"""`)を使うと複数行にわたる文字列をそのままの形で記述できます。
文字列リテラルの構文
// シングルクォートまたはダブルクォートで囲みます
'文字列';
"文字列";
// 文字列補間 — 変数を埋め込みます
'$変数名';
"$変数名";
// 文字列補間 — 式を埋め込みます(${} が必要)
'${式}';
"${式}";
// 複数行文字列 — 三重クォートで囲みます
'''
1行目
2行目
3行目
''';
"""
1行目
2行目
3行目
""";
// 生文字列(r プレフィックス)— バックスラッシュをエスケープしません
r'C:\Users\okabe\documents';
よく使う String メソッド・プロパティ一覧
| メンバー | 概要 |
|---|---|
| length | 文字列の文字数を返すプロパティです。 |
| isEmpty / isNotEmpty | 文字列が空かどうかを返すプロパティです。 |
| toUpperCase() / toLowerCase() | 文字列を大文字・小文字に変換して返します。 |
| trim() / trimLeft() / trimRight() | 前後(または片側)の空白文字を除去した文字列を返します。 |
| contains(other) | 指定した文字列が含まれているかどうかを返します。 |
| startsWith(prefix) / endsWith(suffix) | 指定した文字列で始まる・終わるかどうかを返します。 |
| indexOf(pattern) | 最初に一致した位置のインデックスを返します。見つからない場合は -1 です。 |
| substring(start [, end]) | 指定した範囲の部分文字列を返します。 |
| replaceAll(from, replace) | 一致するすべての部分を置換した文字列を返します。 |
| split(pattern) | 区切り文字で分割した `List<String>` を返します。 |
| padLeft(width [, padding]) / padRight(width [, padding]) | 指定した幅になるよう左側・右側を文字で埋めた文字列を返します。 |
サンプルコード
sg_string.dart
// sg_string.dart — 文字列リテラルと補間の基本サンプルです
// Steins;Gate の登場人物データを使って文字列の操作を示します
void main() {
// -----------------------------------------------
// 基本的な文字列リテラル
// -----------------------------------------------
// シングルクォートとダブルクォートはどちらも使えます(意味は同じです)
var labName = 'Future Gadget Laboratory';
var labNameJp = "未来ガジェット研究所";
print('ラボ名(英語): $labName');
print('ラボ名(日本語): $labNameJp');
// -----------------------------------------------
// 文字列補間 — $変数名 で変数の値を埋め込みます
// -----------------------------------------------
var hostName = '岡部倫太郎';
var labNo = 8;
// $変数名 で変数の値がそのまま展開されます
print('ラボメン No.$labNo: $hostName');
// -----------------------------------------------
// 文字列補間 — ${式} で式の結果を埋め込みます
// -----------------------------------------------
var memberCount = 8;
// ${} の中には任意の式を書けます(計算・メソッド呼び出しなど)
print('ラボメン総数: ${memberCount}人');
print('ラボメン × 2: ${memberCount * 2}人(仮定)');
// 文字列メソッドの呼び出し結果も埋め込めます
print('英語ラボ名(大文字): ${labName.toUpperCase()}');
print('英語ラボ名の文字数: ${labName.length}文字');
// -----------------------------------------------
// 文字列の連結
// -----------------------------------------------
// + 演算子で文字列を結合できます
var firstName = '牧瀬';
var lastName = '紅莉栖';
var fullName = firstName + lastName;
print('フルネーム: $fullName');
// 隣り合うリテラルは自動で連結されます(変数は不可)
var title = 'Assistant '
'of the '
'Lab';
print('称号: $title');
}
dart run sg_string.dart ラボ名(英語): Future Gadget Laboratory ラボ名(日本語): 未来ガジェット研究所 ラボメン No.8: 岡部倫太郎 ラボメン総数: 8人 ラボメン × 2: 16人(仮定) 英語ラボ名(大文字): FUTURE GADGET LABORATORY 英語ラボ名の文字数: 26文字 フルネーム: 牧瀬紅莉栖 称号: Assistant of the Lab
複数行文字列のサンプル
sg_multiline.dart
// sg_multiline.dart — 三重クォートを使った複数行文字列のサンプルです
// Steins;Gate の D-メール(過去へのメール)テキストを複数行文字列で表現します
void main() {
// -----------------------------------------------
// 三重シングルクォートによる複数行文字列
// -----------------------------------------------
// ''' ... ''' の中はそのままの改行・インデントが保持されます
var dmail = '''
送信者: 鳳凰院凶真
宛先: 過去の自分
件名: 収束しない未来
IBN 5100 を秋葉原で確保せよ。
世界線変動率: 0.337187%
El Psy Kongroo.
''';
print('=== D-メール ===');
print(dmail);
// -----------------------------------------------
// 文字列補間と複数行文字列の組み合わせ
// -----------------------------------------------
var senderName = '岡部倫太郎';
var worldLineValue = 1.048596;
var status = '到達済み';
// ${} を使って複数行文字列の中に変数・式を埋め込めます
var report = '''
=== 世界線移動レポート ===
オペレーター : $senderName
目標世界線 : $worldLineValue
ステータス : $status
判定 : ${worldLineValue >= 1.0 ? 'シュタインズゲート' : '収束域'}
''';
print(report);
// -----------------------------------------------
// 三重ダブルクォートも同様に使えます
// -----------------------------------------------
var labRules = """
【未来ガジェット研究所 規則】
1. ラボメンは互いに助け合う。
2. ドクペは共有財産とする。
3. 「エル・プサイ・コングルゥ」は合言葉とする。
""";
print(labRules);
// -----------------------------------------------
// 生文字列(r プレフィックス)
// -----------------------------------------------
// r を付けると \n や \t などのエスケープシーケンスが展開されません
var rawPath = r'C:\Steins;Gate\saves\worldline_0.dat';
var normalStr = 'C:\\Steins;Gate\\saves\\worldline_0.dat'; // 同じ結果です
print('生文字列 : $rawPath');
print('通常文字列: $normalStr');
print('一致するか: ${rawPath == normalStr}');
}
dart run sg_multiline.dart === D-メール === 送信者: 鳳凰院凶真 宛先: 過去の自分 件名: 収束しない未来 IBN 5100 を秋葉原で確保せよ。 世界線変動率: 0.337187% El Psy Kongroo. === 世界線移動レポート === オペレーター : 岡部倫太郎 目標世界線 : 1.048596 ステータス : 到達済み 判定 : シュタインズゲート 【未来ガジェット研究所 規則】 1. ラボメンは互いに助け合う。 2. ドクペは共有財産とする。 3. 「エル・プサイ・コングルゥ」は合言葉とする。 生文字列 : C:\Steins;Gate\saves\worldline_0.dat 通常文字列: C:\Steins;Gate\saves\worldline_0.dat 一致するか: true
よく使う String メソッドのサンプル
sg_string_methods.dart
// sg_string_methods.dart — String の主要メソッドを示すサンプルです
// Steins;Gate のキャラクター名・セリフデータを使って操作を確認します
void main() {
var characterName = ' 牧瀬紅莉栖 '; // 前後に空白が入っています
// -----------------------------------------------
// trim — 前後の空白を除去します
// -----------------------------------------------
print('元の値 : "$characterName"');
print('trim 後 : "${characterName.trim()}"');
print('trimLeft : "${characterName.trimLeft()}"');
print('trimRight : "${characterName.trimRight()}"');
// -----------------------------------------------
// length / isEmpty / isNotEmpty
// -----------------------------------------------
var trimmed = characterName.trim();
print('');
print('文字数: ${trimmed.length}');
print('空か : ${trimmed.isEmpty}');
print('空でないか: ${trimmed.isNotEmpty}');
// -----------------------------------------------
// contains / startsWith / endsWith
// -----------------------------------------------
var labCode = 'FG-204: タイムマシン計画';
print('');
print('タイムマシンを含むか: ${labCode.contains("タイムマシン")}');
print('FG で始まるか : ${labCode.startsWith("FG")}');
print('計画 で終わるか : ${labCode.endsWith("計画")}');
// -----------------------------------------------
// indexOf / substring
// -----------------------------------------------
var message = '世界線変動率: 1.048596%';
var colonIndex = message.indexOf(':');
print('');
print('コロンの位置: $colonIndex');
// substring(start, end) — start から end の直前まで取り出します
var valueStr = message.substring(colonIndex + 2); // コロンとスペースを除きます
print('数値部分: $valueStr');
// -----------------------------------------------
// replaceAll / split
// -----------------------------------------------
var labMembers = '岡部倫太郎,牧瀬紅莉栖,椎名まゆり,橋田至';
// replaceAll でカンマを読点に置換します
var formatted = labMembers.replaceAll(',', '、');
print('');
print('置換後: $formatted');
// split でリストに分割します
var memberList = labMembers.split(',');
print('メンバー数: ${memberList.length}人');
for (var i = 0; i < memberList.length; i++) {
print(' ラボメン No.${i + 1}: ${memberList[i]}');
}
// -----------------------------------------------
// padLeft — 数字を桁揃えするのによく使います
// -----------------------------------------------
print('');
print('世界線リスト(番号揃え):');
var worldLines = [0.337187, 1.048596, 1.130205];
for (var i = 0; i < worldLines.length; i++) {
// 番号を2桁でゼロ埋めします
var no = (i + 1).toString().padLeft(2, '0');
print(' No.$no: ${worldLines[i]}');
}
}
dart run sg_string_methods.dart 元の値 : " 牧瀬紅莉栖 " trim 後 : "牧瀬紅莉栖" trimLeft : "牧瀬紅莉栖 " trimRight : " 牧瀬紅莉栖" 文字数: 5 空か : false 空でないか: true タイムマシンを含むか: true FG で始まるか : true 計画 で終わるか : true コロンの位置: 6 数値部分: 1.048596% 置換後: 岡部倫太郎、牧瀬紅莉栖、椎名まゆり、橋田至 メンバー数: 4人 ラボメン No.1: 岡部倫太郎 ラボメン No.2: 牧瀬紅莉栖 ラボメン No.3: 椎名まゆり ラボメン No.4: 橋田至 世界線リスト(番号揃え): No.01: 0.337187 No.02: 1.048596 No.03: 1.130205
概要
『Dart』の `String` 型はシングルクォート・ダブルクォートのどちらでも宣言でき、`$変数名` または `${式}` による文字列補間で可読性の高いコードを書けます。複数行テキストは三重クォート(`'''` / `"""`)でそのまま記述でき、`r` プレフィックスを付けると生文字列としてバックスラッシュをエスケープせずに扱えます。変数・型の宣言については 変数と型(var・final・const) を、標準出力については print()(標準出力) を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。