Skip to content

字符串和字符串构建器

字符串是不可变的字符序列,这意味着一旦创建了一个 String,它就不能被更改。字符串用于存储文本,因此可以转换为 Cell 类型以用作消息体。

为了以节省 gas 的方式连接字符串,请使用 StringBuilder

要直接使用 String 字面量,请参见:字符串字面量

beginString

solidity
fun beginString(): StringBuilder;

创建并返回一个空的 StringBuilder

使用示例:

solidity
let fizz: StringBuilder = beginString();

beginComment

solidity
fun beginComment(): StringBuilder;

创建并返回一个空的 StringBuilder 用于构建注释字符串,该字符串会在结果 String 前面加上四个空字节。此格式用于将文本注释作为消息体传递。

使用示例:

solidity
let fizz: StringBuilder = beginComment();

beginTailString

solidity
fun beginTailString(): StringBuilder;

创建并返回一个空的 StringBuilder 用于构建尾字符串,该字符串会在结果 String 前面加上一个空字节。此格式用于各种标准如 NFT 或 Jetton。

使用示例:

solidity
let fizz: StringBuilder = beginTailString();

beginStringFromBuilder

solidity
fun beginStringFromBuilder(b: StringBuilder): StringBuilder;

从现有的 StringBuilder b 创建并返回一个新的 StringBuilder。当需要将现有的 String 序列化为带有其他数据的 Cell 时非常有用。

使用示例:

solidity
let fizz: StringBuilder = beginStringFromBuilder(beginString());

StringBuilder.append

solidity
extends mutates fun append(self: StringBuilder, s: String);

StringBuilder 的扩展变异函数。

String s 附加到 StringBuilder

使用示例:

solidity
let fizz: StringBuilder = beginString();
fizz.append("oh");
fizz.append("my");
fizz.append("Tact!");

StringBuilder.concat

solidity
extends fun concat(self: StringBuilder, s: String): StringBuilder;

StringBuilder 的扩展函数。

在与 String s 连接后返回一个新的 StringBuilder。可以链式调用,与 StringBuilder.append() 不同。

使用示例:

solidity
let fizz: StringBuilder = beginString()
    .concat("oh")
    .concat("my")
    .concat("Tact!");

StringBuilder.toString

solidity
extends fun toString(self: StringBuilder): String;

StringBuilder 的扩展函数。

StringBuilder 返回一个构建的 String

使用示例:

solidity
let fizz: StringBuilder = beginString();
let buzz: String = fizz.toString();

StringBuilder.toCell

solidity
extends fun toCell(self: StringBuilder): Cell;

StringBuilder 的扩展函数。

StringBuilder 返回一个组装的 Cell

使用示例:

solidity
let fizz: StringBuilder = beginString();
let buzz: Cell = fizz.toCell();

StringBuilder.toSlice

solidity
extends fun toSlice(self: StringBuilder): Slice;

StringBuilder 的扩展函数。

StringBuilder 返回一个组装的 Cell 作为 Slice。别名为 self.toCell().asSlice()

使用示例:

solidity
let s: StringBuilder = beginString();
let fizz: Slice = s.toSlice();
let buzz: Slice = s.toCell().asSlice();

fizz == buzz; // true

String.asSlice

solidity
extends fun asSlice(self: String): Slice;

String 的扩展函数。

通过尝试将所有位打包到一个连续的 Cells 列表中来从 String 返回一个 Slice,每个单元格引用下一个单元格,并打开它们以供将来解析。

注意,Slice 中没有指示特定字符可以占用多少字节或引用列表的深度,因此仅在你清楚自己在做什么时使用此函数。

使用示例:

solidity
let s: String = "It's alive! It's alive!!!";
let fizz: Slice = s.asSlice();
let buzz: Slice = s.asSlice().asString().asSlice();

fizz == buzz; // true, 但要小心,因为并不总是如此

查看 String.asSlice 函数在实践中的使用方法:如何将 String 转换为 Int

String.asComment

solidity
extends fun asComment(self: String): Cell;

String 的扩展函数。

通过在 String 前面加上四个空字节从 String 返回一个 Cell。此格式用于将文本注释作为消息体传递。

使用示例:

solidity
let s: String = "When life gives you lemons, call them 'yellow oranges' and sell them for double the price.";
let fizz: Cell = s.asComment();

let b: StringBuilder = beginComment();
b.append(s);
let buzz: Cell = b.toCell();

fizz == buzz; // true

String.fromBase64

solidity
extends fun fromBase64(self: String): Slice;

String 的扩展函数。

从解码的 Base64 String 返回一个 Slice。别名为 self.asSlice().fromBase64()

注意,此函数有限制,只从给定的 String 中获取前 $1023$ 位数据,当 String 较大(即包含超过 $1023$ 位数据)时不会抛出异常。

使用示例:

solidity
let s: String = "SGVyZSdzIEpvaG5ueSE=";
let fizz: Slice = s.fromBase64();
let buzz: Slice = s.asSlice().fromBase64();

fizz == buzz; // true

Slice.asString

solidity
extends fun asString(self: Slice): String;

Slice 的扩展函数。

通过尝试加载所有位而不查看其引用(如果有)从 Slice 返回一个 String

注意,此函数完全不查看引用,并将其输出截断为 $1023$ 位,因此仅在你清楚自己在做什么时使用它。

使用示例:

solidity
let s: String = "Keep your Slices close, but your Strings closer.";
let fizz: String = s;
let buzz: String = s.asSlice().asString();

fizz == buzz; // true, 但要小心,因为并不总是如此

Slice.fromBase64

solidity
extends fun fromBase64(self: Slice): Slice;

Slice 的扩展函数。

从解码的 Base64 Slice 返回一个新的 Slice

注意,此函数有限制,只从给定的 Slice 中获取前 $1023$ 位数据,当 Slice 有更多数据(即有任何引用)时不会抛出异常。

使用示例:

solidity
let s: Slice = "SSBhbSBHcm9vdC4=".asSlice();
let fizz: Slice = s.fromBase64();

Int.toString

solidity
extends fun toString(self: Int): String;

Int 的扩展函数。

Int 值返回一个 String

使用示例:

solidity
let fizz: String = (84 - 42).toString();

Int.toFloatString

solidity
extends fun toFloatString(self: Int, digits: Int): String;

Int 的扩展函数。

使用定点表示法Int 值返回一个 String,其中 self 是数字的有效部分,digits 是小数部分的位数。

更准确地说,digits 是 $10^{-\mathrm{digits}}$ 表达式的指数参数,当乘以实际的 Int 值时,给出表示的小数。参数 digits 必须在半闭区间:$0 <=$ digits $< 78$,否则会抛出异常,错误代码为 exit code 134无效参数

使用示例:

solidity
let fizz: String = (42).toFloatString(9); // "0.000000042"

Int.toCoinsString

solidity
extends fun toCoinsString(self: Int): String;

Int 的扩展函数。

使用定点表示法Int 值返回一个 String。别名为 self.toFloatString(9)

这用于表示 nanoToncoin Int 值。

使用示例:

solidity
let nanotons: Int = 42;
let fizz: String = nanotons.toCoinsString();
let buzz: String = nanotons.toFloatString(9);

fizz == buzz; // true, 都存储 "0.000000042"

Address.toString

solidity
extends fun toString(self: Address): String;

Address 的扩展函数。

Address 返回一个 [String]。

使用示例:

solidity
let community: Address = address("UQDpXLZKrkHsOuE_C1aS69C697wE568vTnqSeRfBXZfvmVOo");
let fizz: String = community.toString();