Arrays 如何在perl中去掉数组中的空字符串?
我有一个由许多零和“1”组成的字符串,但我只想从字符串中得到零的值。 因此,我使用split函数来分割'1',但它似乎会在数组中生成undef或空字符串。 所以,我尝试使用foreach扫描每个数组元素,并比较是否有我认为是“unde”的空字符串将被忽略。作为回报,非空字符串中的那些将不会被忽略,并将被放入另一个变量中。问题似乎是它无法识别我的“unde”变量 或 还有另一种更好的方法来扫描字符串,以便提取字符串中的“0”数吗 在这件事上请帮忙。 这就是编码:Arrays 如何在perl中去掉数组中的空字符串?,arrays,perl,Arrays,Perl,我有一个由许多零和“1”组成的字符串,但我只想从字符串中得到零的值。 因此,我使用split函数来分割'1',但它似乎会在数组中生成undef或空字符串。 所以,我尝试使用foreach扫描每个数组元素,并比较是否有我认为是“unde”的空字符串将被忽略。作为回报,非空字符串中的那些将不会被忽略,并将被放入另一个变量中。问题似乎是它无法识别我的“unde”变量 或 还有另一种更好的方法来扫描字符串,以便提取字符串中的“0”数吗 在这件事上请帮忙。 这就是编码: #!/usr/bin/perl
#!/usr/bin/perl
use strict;
use warnings;
my $data = '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000011111
';
my @values = split('1', $data);
my $zero = "0";
foreach my $val (@values)
{
if (!defined$val)
{
$zero= $val;
}
}
print "$zero\n";
exit 0;
非常感谢
问候,,
尼基
使用匹配操作,可以将所有0提取到一个数组中,数组的长度将给出0的计数
使用匹配操作,可以将所有0提取到一个数组中,数组的长度将给出0的计数。尝试使用。它将所有出现的0转换为空字符串,并返回所做更改的数量。这是你的零数
my $data = '111100';
my $count = $temp =~ tr/0//;
print $count;
查看不同方法的基准测试。尝试使用。它将所有出现的0转换为空字符串,并返回所做更改的数量。这是你的零数
my $data = '111100';
my $count = $temp =~ tr/0//;
print $count;
查看不同方法的基准。不确定您需要什么,但正则表达式可能很有用:
#!/usr/bin/perl
use strict;
use warnings;
my $data = '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000011111';
# If you want an array of zeros
my @zeros = $data =~ /0/g;
print "@zeros\n";
# If you want the zeros together
my @multizeros = $data =~ /0+/g;
print "@multizeros\n";
给出:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000000000000000
不确定您需要什么,但正则表达式可能很有用:
#!/usr/bin/perl
use strict;
use warnings;
my $data = '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000011111';
# If you want an array of zeros
my @zeros = $data =~ /0/g;
print "@zeros\n";
# If you want the zeros together
my @multizeros = $data =~ /0+/g;
print "@multizeros\n";
给出:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
000000000000000
尽管正则表达式匹配可能是实现这一点的最有效方法,正如Guru和cdarke所建议的,您可以通过在
1
s组上进行拆分,而不是在单个1
s组上进行拆分:
$d = 101111001;
say scalar split /1+/, $d; # prints 3
尽管正则表达式匹配可能是实现这一点的最有效方法,正如Guru和cdarke所建议的,您可以通过在
1
s组上进行拆分,而不是在单个1
s组上进行拆分:
$d = 101111001;
say scalar split /1+/, $d; # prints 3
您还可以使用来缩短它:
my$count=()=$data=~m/0/g代码>谢谢分享。。这确实解决了问题。很高兴您能提供帮助:DYou还可以使用来缩短它:my$count=()=$data=~m/0/g代码>谢谢分享。。这确实解决了问题。很高兴您能提供帮助:DYou可以使用tr/0/0/
来避免修改原始字符串:perl-E'$d=10101;比如说$d=~tr/0/0/;比如说d美元代码>输出:2
,10101
它不修改字符串。将采样线与tr/0/
一起使用。您需要tr/0//d
来告诉它删除零。(零?@JimDavis你说得对,谢谢。我编辑了我的答案。表示零和零都是正确的。我的柯林斯也这么说,没有AE/在这里,只是两者都有@user1799941什么类型的错误?请发布错误消息。您可以使用tr/0/0/
避免修改原始字符串:perl-E'$d=10101;比如说$d=~tr/0/0/;比如说d美元代码>输出:2
,10101
它不修改字符串。将采样线与tr/0/
一起使用。您需要tr/0//d
来告诉它删除零。(零?@JimDavis你说得对,谢谢。我编辑了我的答案。表示零和零都是正确的。我的柯林斯也这么说,没有AE/在这里,只是两者都有@user1799941什么类型的错误?请发布错误消息。