my @r = split("", "hi");
say @r.elems;
--> output: 4
split
是增加两个额外的元素到所述阵列,一个在开始,另一个在结尾。Perl6分割功能添加额外的元件,以阵列
为了纠正这个问题,我必须在每次拆分之后进行移位和弹出。
有更好的方法来拆分字符串吗?
my @r = split("", "hi");
say @r.elems;
--> output: 4
split
是增加两个额外的元素到所述阵列,一个在开始,另一个在结尾。Perl6分割功能添加额外的元件,以阵列
为了纠正这个问题,我必须在每次拆分之后进行移位和弹出。
有更好的方法来拆分字符串吗?
如果你正在拆分空字符串,那么将在返回列表的开始和结束处得到一个空元素,因为在字符串之前和之后还有一个空字符串。
你想要的是.comb
不带参数,写出来的完全功能:
"hi".comb.elems.say; # 2
更多信息,请参见https://docs.perl6.org/routine/comb#(Str)_routine_comb。
这样做的原因是,当您使用空海峡“”
为分隔符是一样的,如果你用了这一个相匹配的字符正则表达式/<|wb>/
。所以它也匹配在第一个字符之前和最后一个字符之后。在这种情况下,Perl 5会为你删除这些“额外的”字符串(在这种情况下),这可能是困惑所在。
什么Perl 6的做反而是让你明确:skip-empty
值
'hi'.split('') :skip-empty
'hi'.split('', :skip-empty)
split("", "hi") :skip-empty
split("", "hi", :skip-empty)
或指定你真正想要的
'hi'.comb(/./)
'hi'.comb(1)
'hi'.comb
comb(/./, 'hi')
comb( 1, 'hi')