跳转到内容

字符串(Strings)和字符串构造器(StringBuilders)

字符串是不可更改的字符序列,这意味着 String一旦创建,就不能更改。 字符串可用于存储文本,因此可将其转换为cell类型,用作信息体。

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

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

beginString

fun beginString(): StringBuilder;

创建并返回空 StringBuilder

示例用法:

let fizz: StringBuilder = beginString();

beginComment

fun beginComment(): StringBuilder;

创建并返回一个空的 StringBuilder,用于生成注释字符串,并在生成的 String 前加上四个空字节。 这种格式用于传递文本注释作为报文正文。

使用示例

let fizz: StringBuilder = beginComment();

beginTailString

fun beginTailString(): StringBuilder;

创建并返回一个空的 StringBuilder,用于生成尾字符串,并在生成的 String 前加上一个空字节。 这种格式在 NFT 或 Jetton 等各种标准中都有使用。

示例用法:

let fizz: StringBuilder = beginTailString();

beginStringFromBuilder

fun beginStringFromBuilder(b: StringBuilder): StringBuilder;

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

示例用法:

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

StringBuilder.append

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

用于 StringBuilder 的扩展突变函数。

String s 追加到 StringBuilder

示例用法:

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

StringBuilder.concat

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

StringBuilder 的扩展函数。

String s 连接后,返回一个新的 StringBuilder。 与 StringBuilder.append()不同,可以进行链式操作。

示例用法:

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

StringBuilder.toString

extends fun toString(self: StringBuilder): String;

StringBuilder的扩展函数。

返回从 StringBuilder构建的 String

示例用法:

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

StringBuilder.toCell

extends fun toCell(self: StringBuilder): Cell;

StringBuilder的扩展函数。

返回由 StringBuilder组装的 cell

示例用法:

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

StringBuilder.toSlice

extends fun toSlice(self: StringBuilder): Slice;

StringBuilder 的扩展函数。

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

用法示例:

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

String.asSlice

extends fun asSlice(self: String): Slice;

String 的扩展函数。

String返回一个Slice,方法是尝试将其所有位打包到一个连续的cell列表中,每个cell引用下一个cell,并为将来的解析打开所有cell。

请注意,Slice中没有说明特定字符可能占用多少字节,也没有说明引用列表的深度,因此只有在知道自己在做什么的情况下才能使用该函数。

用法示例:

let s: String = "It's alive! It's alive!!!";
let fizz: Slice = s.asSlice();
let buzz: Slice = s.asSlice().asString().asSlice();
fizz == buzz; // true, but be careful as it's not always the case

String.asComment

extends fun asComment(self: String): Cell;

String 的扩展函数。

String 返回一个 cell,在后者的前缀加上四个空字节。 此格式用于将文本评论作为消息正文传递。

用法示例:

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

extends fun fromBase64(self: String): Slice;

String 的扩展函数。

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

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

如果给定的 String 包含不属于 Base64 集的字符,则会出现退出码 134异常:Invalid argument

用法示例:

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

Slice.asString

extends fun asString(self: Slice): String;

Slice 的扩展函数。

String 返回一个 Slice,方法是尝试加载它的所有位,而不查找它的引用(如果有的话)。

请注意,该函数根本不查看引用,而且会将输出截断到 10231023 位,因此只有在知道自己在做什么的情况下才使用它。

用法示例:

let s: String = "Keep your Slices close, but your Strings closer.";
let fizz: String = s;
let buzz: String = s.asSlice().asString();
fizz == buzz; // true, but be careful as it's not always the case

Slice.fromBase64

extends fun fromBase64(self: Slice): Slice;

Slice 的扩展函数。

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

请注意,该函数是有限制的,只能从给定的 Slice 中获取前 10231023 位数据,如果 Slice 有更多数据(即有任何引用),则不会抛出异常。

如果给定的 Slice包含不属于 Base64 集的字符,将产生退出码 134异常:Invalid argument

用法示例:

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

Int.toString

extends fun toString(self: Int): String;

Int 的扩展函数。

Int 值返回 String

用法示例:

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

Int.toFloatString

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

Int 的扩展函数。

返回一个 String,它是通过 Int 值使用 定点表示法 的小数形式生成的,其中 self 是数值的有效部分,digits 是小数部分的位数。

更精确地说,digits 是一个指数参数,表示 10digits10^{-\mathrm{digits}},当与实际的 Int 值相乘时,给出表示的小数值。 参数 digits 必须在封闭区间内:0<0 < digits <78< 78,否则会出现 exit code 134异常:Invalid argument

用法示例:

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

Int.toCoinsString

extends fun toCoinsString(self: Int): String;

Int 的扩展函数。

返回一个 String,该字符串由 Int 值通过 定点表示法 转换为分数形式的数字。 别名为 self.toFloatString(9)

用于用字符串表示 nano Toncoins Int值。

用法示例:

let nanotons: Int = 42;
let fizz: String = nanotons.toCoinsString();
let buzz: String = nanotons.toFloatString(9);
fizz == buzz; // true, both store "0.000000042"

Address.toString

extends fun toString(self: Address): String;

Address 的扩展函数。

Address 返回 String

用法示例:

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