辛蒂JS公司

字符串运算符

本节列出了将字符串作为参数的运算符。此外,还将处理从其他值生成字符串的运算符。

基本字符串操作

字符串串联:字符串1›+字符串2›

说明:这个+运算符还可以用于将一个字符串附加到另一个字符串。这样一个操作的结果还是一个字符串。如果在加法运算中,至少有一个参数是字符串,则另一个参数将自动转换为其值的字符串表示形式。

“辛迪”+“脚本”
“CindyScript”
“四加三等于”+(4+3)
“四加三等于七”
""+(4+3)
"7"

另请参见:这个+运算符还用于添加常用数值。为此,请参阅算术运算符.


转换为字符串:文本(expr›)

说明:操作员文本(expr›)计算表达式出口›并将结果转换为字符串表示形式。

文本(7.2)
“7.2”
文本([true,“foo”,(;)])
“[true,foo,___]”

未定义的输入在灰姑娘中产生未定义的输出:

只有灰姑娘
文本(;)
___

在CindyJS中,输出仍然是字符串,以避免出现拐角情况。

只有CindyJS
文本(;)
“___”

几何对象自动与数学值交互

创建点(“A”,[6,4,2]);文本(A)
"[3, 2]"

字符串长度:长度(字符串›)

说明:此运算符返回字符串中的字符数。

例子: 长度(“CindyScript”)计算为整数11.

另请参阅: 列表和线性代数


提取子字符串:子串(字符串›,int1›,int2›)

说明:此运算符返回的子字符串字符串›开始于由整数索引的字符之后整数›并以索引的字符结尾int2›.

例子: 子字符串(“abcdefg”,3,6)计算为字符串“定义”.


搜索事件:索引(字符串1›,字符串2›)

说明:此运算符搜索第一次出现的字符串2›在里面字符串1›.返回第一次出现的索引。如果字符串2›不是的子字符串›字符串1›,则值0返回。

indexof(“CindyScript”,“i”)
2
索引(“CindyScript”,“y”)
5
索引(“CindyScript”,“z”)
0

搜索事件:indexof(字符串1›,字符串2›,⁄int›)

说明:此运算符搜索第一次出现的字符串2›在里面字符串1› 索引之后.返回第一个此类事件的索引。如果字符串2›不发生在字符串1›索引之后.,然后是值0返回。

索引(“CindyScript”,“i”,1)
2
索引(“CindyScript”,“i”,3)
9
索引(“CindyScript”,“i”,10)
0

高级字符串操作

剖析字符串:标记化(字符串›,expr›)

说明:此运算符对于解析输入非常有用。它创建的子字符串列表字符串›.第二个参数出口›必须是字符串或字符串列表。如果出口›是一个字符串,则运算符在字符串›.这些事件可以作为将字符串›分解为碎片列表的标记。

如果expr›是字符串列表,则会生成一个分层列表表示的细分字符串›通过列表中的标记递归。

标记化(“一:二..三:四”,“:”)
[“一”、“二..三”、“四”]
标记化(“一:二…三:四”,“.”)
[“一:二”、“”、“三:四”]
标记化(“一:二..三:四”,“..”)
[“一:二”,“三:四”]
标记化(“一:二..三:四”,[“.”,“:”])
[[“一”、“二”]、[“”]、[[“三”、“四”]]
标记化(“一:二..三:四”,[“..”,“:”])
[[“一”、“二”]、[“三”、“四”]]
标记化(“(1;2)”,“;”)
[“(1”,“2)”]

标记化通常将数字的字符串表示转换为数字对象。这可能会导致信息丢失。在Java版本中,转换如下所示:

只有灰姑娘
标记化(“7777777777”,“:”)
[77777777777777776]

然而,在JavaScript中ECMAScript的舍入规则强制使用尾随零:

只有CindyJS
标记化(“7777777777”,“:”)
[77777777777777780]

要禁用此行为,请使用自动转换修改器并将其设置为.

标记化(“7777777777”,“:”,autoconvert->false)
["77777777777777777"]

可以使用空分隔符列表实现无需拆分的数字转换:

标记化(“1234”,[])+1
1235
标记化(“x1234”,[])+1
“x12341”

串中替换:更换(字符串1›、字符串2›、字符串3›)

说明:该操作符将所有出现的(!)个“字符串2›”替换为“字符串1›”中的“字符串3›”。

这个操作符对于创建在所谓的Lindenmeyer系统中使用的文本替换系统非常有用。

替换(“一:二..三:四”,“o”,“XXX”)
“XXXne:twXXX..three:fXXXur”
替换(“F”、“F”和“F+F”)
“F+F”
替换(“F+F”、“F”、”F+F“)
“F+F+F+F+F”
替换(“3*$+4”,“$”,“x”)
“3*x+4”
替换(“1\2”、“\”、“$&”)
"1$&2"

串中替换:替换(字符串›,列表›)

说明:这个运算符与上一个运算符非常相似。列表›包含替换对列表,所有此类替换同时应用于字符串›.

替换(“XYX”,[[“X”,“one”],[“Y”,“two”]])
“一二一”

分析字符串:解析(字符串›)

说明:此运算符将字符串解析为表达式并计算此表达式。此运算符在处理来自构造中的文本字段的用户输入时特别有用。

解析(“3+7”)
10

代码片段

text=“sin(x)+cos(x)”;f(x):=解析(文本);

定义函数f(x)成为正弦(x)+余弦(x).

f(90°)
1

分析CSV字符串:parseCSV(字符串›)

说明:此运算符将逗号分隔值(CSV)字符串解析为列表列表。

只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(“Foo,1.02.3巴正确,5.0.7")
[[“Foo”,1],[“Bar”,2.3],[真,“5.0.7”]]

CSV文件中的所有行应具有相同的列数。如果不是这样,则用___.

只有CindyJS:parseCSV还没有为Cinderella实现
解析CSV(“11,1221、22、23、24,31,32, 3341")
[[11, 12, ___, ___, ___], [21, 22, 23, 24, ""], [31, 32, " 33", ___, ___], [41, ___, ___, ___, ___]]

数字和布尔值被转换为各自的CindyScript对应项。如果这不是期望的行为自动转换修饰符可以设置为.

只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(“Foo,1.0,true,bar”,自动转换->false)
[[“Foo”,“1.0”,“true”,“bar”]]

布尔值的第一个字母可以大写,但其余字母必须小写。

只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(“真、真、真,真、假、假、反、反”)
[[true,true,“true”,“true”,false,false,“false”,“false”,“false”]]

当前实现不自动转换科学记数法。然而,它确实处理无限值。然而,在未来的版本中,这可能会发生变化,所以不要依赖于此。

只有CindyJS:parseCSV还没有为Cinderella实现
解析CSV(“1e2,1e+2,1e-2无限、+无限、-无限100,+100,-100")
[[“1e2”,“1e+2”,“1-2”],[无穷,无穷,-无穷],[100,100,-100]]

字符串可以用双引号括起来。在这样一个带引号的字符串中,双引号的出现次数必须加倍。以下示例写入'代表",然后使用unicode(“22”)用实际的"字符。

只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(替换(“a,'b,c'’d'',e',fg、 h'i'j、'kl、 m,n'“,”“,unicode(”22“))
[[“a”,“b”,c\“d\”,“e”,“f”],[“g”,“h\”i\“j”,“k\nl,m,n”]]

行可以通过回车、换行、,或回车,后跟换行符。输入可以混合使用行尾约定。

只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(替换(replace(“1,2\n3,4\r5,6\n\r7,8\r\n9,10”,“\r”,unicode(“0D”),“\n”,unicode(“0A”))
[[1, 2], [3, 4], [5, 6], ["", ___], [7, 8], [9, 10]]

最后一行的行终止符是可选的。如果最后一行以空字段结尾,由于实现的内部原因,这可能很棘手。

只有CindyJS:parseCSV还没有为Cinderella实现
解析CSV(“1,211,“)
[[1, 2], [11, ""]]
解析CSV(“1,2,311,")
[[1, 2, 3], [11, "", ___]]
解析CSV(“1,”)
[[1, ""]]
解析CSV(“111,")
[[1,___],[11,“”]]

修饰符分隔符可用于设置分列字符。该修饰符的参数必须是单个字符,不包括"、换行符和回车符。默认分隔符是逗号(如CSV名称所示)。

只有CindyJS:parseCSV还没有为Cinderella实现
parseCSV(“1;2,3;4.5”,分隔符->“;”)
[[1, "2,3", 4.5]]

由于可能的特殊含义,一些分隔符需要额外检查在内部实现中,因此在这里检查这些。

只有CindyJS:parseCSV还没有为Cinderella实现
解析CSV(“1,2d3”,分隔符->“d”)
[["1,2", 3]]
parseCSV(“1,2.3”,分隔符->“.”)
[["1,2", 3]]
parseCSV(“1,2$3”,分隔符->“$”)
[["1,2", 3]]

猜测数字的良好表示:猜测(›数字›)

CindyJS中尚不可用!

说明:这一功能强大的操作符将在本节中详细描述微积分.它采用浮点表示形式的数值表达式,并尝试将其转换为数学表达式,以高精度生成该浮点数。然后将此表达式表示为字符串。

跳过测试:猜测尚未实现
猜测(8.125)
"65/8"
猜测(0.774596669241483)
“平方英尺(3/5)”

另请参见: 微积分


将数字格式化为指定精度:格式(б数字›,б整数›)

说明:此运算符以数字作为第一个参数,以整数指定小数点后的位数。将生成一个字符串,该字符串与指定精度以下的数字相对应。灰姑娘最多可输入14位数字,灰姑娘最多可以输入20位数字。如果format参数是一个对象列表,那么format语句将递归地应用于每个对象。

格式(sqrt(2),4)
"1.4142"
格式(π,14)
"3.14159265358979"
格式(1.23456+98.765432*i,2)
“1.23+i*98.77”
格式([sin(30°),cos(30°)],3)
["0.5", "0.866"]

如果第一个参数既不是数字也不是列表,则结果为___.然而,如果它是一个列表,并且嵌套在该列表中的某个地方是一个既不是数字也不是列表的值,那么该值将被转换为自身的字符串表示。

格式(“foo”,4)
___
格式(1<2,4)
___
格式([2.339,“foo”,[5.678,1<2],2)
[“2.34”,“foo”,[“5.68”,“true”]]

修饰符分隔符可用于设置小数分隔符。

只有CindyJS:“分隔符”修饰符在Cinderella中不可用。
格式(1.23456,2,分隔符->“,”)
"1,23"

修饰符截断可以用来防止输出被截断。

只有CindyJS:“truncate”修饰符在Cinderella中不可用。
格式(1,2,truncate->false)
"1.00"

请求超过20位数字将永远不会有任何效果。

format(1/3,20)==格式(1/3,40)
真的

警告:生成format语句只应用于创建格式化的输出元素。格式化值将始终为因此,算术运算的对象通常无效。以下示例说明了这一点:

格式(sqrt(2),4)+格式(sqrt(2),4)
"1.41421.4142"


字符串比较和排序

与实数一样,字符串也接受总排序。因此,可以使用运算符对它们进行比较>,<,>=,<=,==、和!=.请参阅布尔算子为了使用这些关系。

字符串的顺序是字典顺序。因此,例如,

“a”<“abd”<“ab”<“b”<“blue”<“burth”<“xxx”

对字符串列表进行排序

说明:

各种版本的这个分类操作人员可用于对包含字符串值的列表进行排序。排序顺序通常被认为是单词的字典顺序。或者,可以指定用户定义的排序函数,例如字符串的长度。

排序([“一”、“二”、“三”、“四”、“五”])
[“五”、“四”、“一”、“三”、“二”]
排序([“一”,“二”,“三”,“四”,“五”],长度(#))
[“一”、“二”、“四”、“五”、“三”]

另请参见: 列表和线性代数,高级列表操作



访问和替换字符

索引运算符:字符串›_int›

说明:中缀运算符_访问列表字段的,也可以用于访问字符串中特定位置的字符。可以使用此运算符返回和设置字符。

“CindyScript”_5
“y”
“CindyScript”_[1,6]
[“C”、“S”]
“CindyScript”_12
警告:索引超出范围!
___
a=“CindyScript”;a_5=“埃雷拉”;
“灰姑娘脚本”

在本例中,单个字母已被较长的字符串替换。

中缀运算符_也用于列表订阅。这两种形式可以结合使用,既可以用于阅读,也可以用于写作。

b=“辛迪”;a=[b,“脚本”];a_1_5=“瑞拉”;
[“灰姑娘”,“脚本”]
只有灰姑娘:已知的灰姑娘臭虫#83
b条
“辛迪”