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')