字符串(Strings)和字符串构造器(StringBuilders)
字符串是不可更改的字符序列,这意味着 String
一旦创建,就不能更改。 字符串可用于存储文本,因此可将其转换为cell
类型,用作信息体。
要以省 gas 的方式连接字符串,请使用 StringBuilder
。
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
中获取前 位数据,当 String
较大(即包含超过 位数据)时,不会抛出异常。
如果给定的 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
,方法是尝试加载它的所有位,而不查找它的引用(如果有的话)。
请注意,该函数根本不查看引用,而且会将输出截断到 位,因此只有在知道自己在做什么的情况下才使用它。
用法示例:
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
中获取前 位数据,如果 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
的扩展函数。
用法示例:
let fizz: String = (84 - 42).toString();
Int.toFloatString
extends fun toFloatString(self: Int, digits: Int): String;
Int
的扩展函数。
返回一个 String
,它是通过 Int
值使用 定点表示法 的小数形式生成的,其中 self
是数值的有效部分,digits
是小数部分的位数。
更精确地说,digits
是一个指数参数,表示 ,当与实际的 Int
值相乘时,给出表示的小数值。 参数 digits
必须在封闭区间内: digits
,否则会出现 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
的扩展函数。
用法示例:
let community: Address = address("UQDpXLZKrkHsOuE_C1aS69C697wE568vTnqSeRfBXZfvmVOo");let fizz: String = community.toString();