-
Notifications
You must be signed in to change notification settings - Fork 14
Core String
lriki edited this page Jul 6, 2022
·
1 revision
文字列を扱うときは ln::String
クラスを使います。 ln::String
は UTF-32 (char32_t) で文字列を保持します。UTF-32 の文字や文字列リテラルには、U'A'
, U"ABC"
のように U プレフィックスを付けます。
ln::String s = U"Hello!";
std::cout << s;
ln::String へ | std::string へ | std::wstring へ | |
---|---|---|---|
ln::String から | = | str.toStdString() または str.toUtf8() |
str.toStdWString() |
char* から | ln::String::fromCStr(str) または ln::String::fromUtf8(str) |
= | N/A |
std::string から | ln::String::fromStdString(str) または ln::String::fromUtf8(str) |
= | N/A |
wchar_t* から | ln::String::fromCStr(str) | = | N/A |
std::wstring から | ln::String::fromStdWString(str) | N/A | = |
ln::String s1 = U"あいうえお";
std::string s2 = s1.toUtf8();
std::wstring s3 = s1.toStdWString();
これらの変換先・変換元となる std::string (及び char) の文字コードは、プログラムが動作している OS の言語設定により変化します。例えば次のようになります。
- Unix 系 OS であれば UTF-8
- 日本語 Windows であれば Shift_JIS
- 英語 Windows でれば ASCII
+=
や +
演算子を使うのが簡単です。
ln::String str = U"Hello";
str += U", ";
str = str + U"world!";
std::cout << str; // => "Hello, world!"
長い文字列を連結する場合、上記のような演算子よりも concat を使用すると高速に連結できます。
ln::String str = ln::String::concat(U"LongString1", U"-", U"LongString2");
std::cout << str; // => "LongString1-LongString2"
ln::String str = U"ABC";
if (str.isEmpty()) {
// 空である
}
ln::String str = U"ABC";
if (str) {
// 空ではない
}
if (!str) {
// 空である
}
ln::format()
を使うことで、書式指定文字列を使用した文字列の整形ができます。
ln::format(U"Hello, {}!", U"World"); // => "Hello, World!"
ln::format(U"{:08d}.txt", 12345); // => "00012345.txt"
ln::format(U"0x{:x}", 255); // => "0xff"
ln::format(U"0x{:04X}", 255); // => "0x00FF"
書式文字列の構文は fmt ライブラリと同様です。
ln::String s1 = U"abcdef";
ln::String s2 = s.substr(2, 3); // => "cde"
ln::String s1 = U"a,b,c";
auto tokens = s1.split(U","); // => ["a", "b", "c"]
ln::String s1 = U"ABC";
ln::String s2 = s1.replace(U"AB", U"C"); // => "CC"