【Solidity】長い文字列(複数行の文字列)を扱うには?

Solidityで長い文字列(複数行の文字列)を扱う方法について解説します。

構文

Solidityで長い文字列(複数行の文字列)を扱うには、主に2つ方法があります。

一つは単純にクォーテーションを改行する方法、もう一つは、文字列連結を使う方法です。

それぞれ記します。

クォーテーションを改行する方法

以下のようにクォーテーションごとに改行を行います。

"文字列1"
"文字列2"
[ ...[文字列n]];

文字列連結を使う方法

文字列連結はstring(abi.encodePacked())により可能ですが、この引数の文字列を改行します。

string(
    abi.encodePacked(
        "文字列1",
        "文字列2",
        [, ...[, 文字列n]]
    )
);

サンプルコード

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract Test {

    function showMultilineString() public pure returns(string memory) {
        // クォーテーションを改行する方法
        string memory str =
            "This "
            "is "
            "multiline "
            "string."
            ;
        return str;
    }

    function showMultilineStringByAbi() public pure returns(string memory) {
        // 文字列連結を使う方法
        string memory str = 
            string(
                abi.encodePacked(
                    "This ",
                    "is ",
                    "multiline ",
                    "string ",
                    "by ",
                    "abi."
                )
            );
        return str;
    }

}

前者のクォーテーションを改行する方法がシンプルですね。文字列連結のやり方をおさらいする意味でも後者のやり方もさらっと見ておきましょう。

タイトルとURLをコピーしました