Characters & text
Characters
Section titled “Characters”The Char type in Motoko represents a single Unicode character delimited with a single quotation mark (').
let letter : Char = 'A';let symbol : Char = '✮';
// Comparing characters'I' == 'i' // False:::note Iter
An Iter<T> is an object that sequentially produces values of specified type T until no more values remain.
:::
import Char "mo:core/Char";
func reverse(t: Text) : Text { var result = ""; for (c in t.chars()) { result := Char.toText(c) # result }; result;};
reverse("Motoko");The operator # concatenates two Text values.
import Text "mo:core/Text";import Iter "mo:core/Iter";import Char "mo:core/Char";
persistent actor Alternator {
// Turn text into an iterator of Char func textToChars(t: Text) : Iter.Iter<Char> { t.chars(); };
// Alternate capitalization public func alternateCaps(t: Text) : async Text { let chars = textToChars(t); var index = 0; // Apply a case function to each char let modified = Iter.map<Char, Text>(chars, func(c: Char) : Text { let charAsText = Char.toText(c); let transformedText = if (index % 2 == 0) { Text.toUpper(charAsText) } else { Text.toLower(charAsText) }; index += 1; transformedText; });
return Text.join("", modified); };};Strings of characters, familiar from other languages, are called text in Motoko, and represented using the Text type. A text value is an immutable sequence of Unicode characters delimited with a double quotation mark (").
let greeting : Text = "Hello, world!";The # operator concatenates two Text values:
// Concatenating text
"ICP " # "❤️" # " Motoko" // "ICP ❤️ Motoko"t.size() can be used to return the number of characters in the text t.
"abc".size() == 3t.chars() returns an iterator enumerating the characters in t. For example:
import Char "mo:core/Char";import Debug "mo:core/Debug";
for (c in "abc".chars()) { Debug.print(Char.toText(c));}Text values can be compared using ”==”, ”<” and all the other relational operators.