String.fromCharCodes constructor
String.fromCharCodes(
Iterable<int>charCodes, [int start = 0, int? end])
指定された charCodes
を含む新しい文字列を割り当てます。
charCodes
は、UTF-16コードユニット
とルーン文字の両方にすることができます。char-code値が16ビットの場合、コード単位として使用されます。
なんのこっちゃ、という事でとりあえずコード書いてprint(出力)
してみました。
print(String.fromCharCodes('A'.codeUnits));
// A;
'A'
のみだと、int型
にしなさいとエラーがでるのでUTF-16 コード単位
であるcodeUnits,codeUnitAtメソッド
を付与していきます。まずは、start
とend
の変数にラテン語A
とZ
のコードユニットをいれてfor文
でA~Z
を出力してみます。
int start = 'A'.codeUnitAt(0);
int end = 'Z'.codeUnitAt(0);
print(String.fromCharCodes([for (var i = start; i <= end; i++) i]));
// ABCDEFGHIJKLMNOPQRSTUVWXYZ
次に、変数にラテン語A
のコードユニットを入れて、イテレータ(処理を抽象化)
を使用し走査する Iterable.generateコンストラクタ
でZ
まで出力してみます。
int a = 'A'.codeUnitAt(0);
print(String.fromCharCodes(new Iterable.generate(26, (x) => a + x)));
// ABCDEFGHIJKLMNOPQRSTUVWXYZ
更に、A
からZ
の文字コードの番号65
を利用して同じように出力してみます。
List<int> list = new List<int>.generate(26, (int index) => index + 65);
String a = String.fromCharCodes(list);
print(a);
// ABCDEFGHIJKLMNOPQRSTUVWXYZ
A
B
C
と連結せずに一文字ずつfor文
で出力してみます。
for(int i = 0; i <= 25; i++){
print(String.fromCharCode(i + "A".codeUnitAt(0)));
}
// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
同じく、for文
でコード単位
をループ。
for (int s = "A".codeUnitAt(0); s <= "Z".codeUnitAt(0); s++) {
print(String.fromCharCode(s));
}
// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
変数で始まりと終わりをもとめて、while文
で終わりを知らせて出力。
int start = "A".codeUnitAt(0);
int end = "Z".codeUnitAt(0);
while (start <= end) {
print(String.fromCharCode(start));
start++;
}
// A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
最後にこちらの配列をA,B,C
に変えてみます。
var list = [for (var i = 0; i < 26; i++) i ];
var list = [for (var i = 0; i <= 25; i++) i ];
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
配列の長さと構造がわかっているのでList.generate
を利用し、ループさせます。
var list = List.generate(26, (int index) =>
String.fromCharCode(index + 'A'.codeUnits[0]));
print(list);
// [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]
以上です、ご参考までに。