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などの外部ライブラリを使うのも手です。