my @r = split("", "hi");
say @r.elems;
--> output: 4
split
在数组中添加了两个额外的元素,一个在开头,另一个在结尾。
我必须在每次拆分后进行移位和弹出以纠正此问题。
有没有更好的方法来分割字符串?
答案 0 :(得分:6)
如果要拆分空字符串,将在返回列表的开头和结尾处获取一个空元素,因为在字符串之前和之后还有一个空字符串。< / p>
你想要的是.comb
没有参数,完全在功能上写出:
"hi".comb.elems.say; # 2
有关详细信息,请参阅https://docs.perl6.org/routine/comb#(Str)_routine_comb。
答案 1 :(得分:2)
这样做的原因是当你使用空的Str “”
作为分隔符时,它就像你使用了匹配字符旁边的正则表达式/<|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' )