【Solidity】文字数(文字列の長さ)を取得するには?

Solidityで文字数(文字列の長さ)を取得する方法について解説します。

構文

Solidityで文字数を取得するには、以下のようにします。

bytes(文字列).length

文字列に対しそのままlengthメソッドを使えないため、いったん、bytes関数で文字列をバイト列に変換する必要があります。

また、日本語の場合、マルチバイト文字ということで、多くの文字で1文字=3,4バイト(3,4文字分)として算出されてしまうため、注意が必要です。

サンプルコード

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract Test {

    function getStrLen(string memory str) public pure returns(uint) {
        // 文字数(文字列の長さ)を取得
        // ※日本語の場合、1文字=3,4バイト(3,4文字分)として算出されるため注意が必要です
        return bytes(str).length;
    }

}

Solidityにおいては、日本語(マルチバイト文字)の扱いが難しいですね...。自前で実装するのもいいですが、solidity-stringutilsなどの外部ライブラリを使うのも手です。

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