我想分割一个字符串(其中有数字)。在下面的示例中,我想在 k 和 k1 处分割字符串。
my @array1=("0","23","1","4","65","7");
$k=1;$k1=0;
my $j=join("",@array1);
my @ar=split(/($k|$k1)/,$j);
print join(";",@ar),"\n\n";
输出为;0;23;1;4657
在上面的输出中,多了一个分号“;”正在打印
预期输出为0;23;1;4657
当我在下面的示例中尝试上述代码时,输出是正确的:(0;5;123;4;6)
;此处不打印额外的分号。
my @array1=("0","5","1234","6");
$k=5;$k1=4;
我不确定,出于什么原因,第一个示例打印了额外的分号“;”
有人可以帮我吗?
最佳答案
不同之处在于,当您围绕第一个字符进行拆分时,您会在开头得到一个空值。因此额外的; 0 之前(以及“”之后)。您也会类似地发现;;当分割两个相邻字符时
所以绝对最简单的修复方法是使用 grep 删除空字符串:
my @ar=split(/($k|$k1)/,$j);
@ar = grep /./, @ar;
这会删除 @ar 中的空字符串。
从更大的角度来看,您可能想看看为什么要连接字符串只是为了将它们重新分开。您还将一个地方的数字进行拆分,而该数字可能会出现在另一个地方。就像 $k=1 和 @array1 = (11, 23, 1, 4);
关于perl - 在 Perl 中分割包含数字的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13224684/