关于perl的字符串

关于perl的字符串,第1张

$a="c:\program
files\installshield
installation
information\{bf06680-3bbafee5524c}\abcpl
";
$a=~m/\\()\pl$/;
print
"$a\n";
这是正则表达式的。
$a="c:\program
files\installshield
installation
information\{bf06680-3bbafee5524c}\abcpl
";
my
@b
=
split(/\\/,$a);
my
@c
=
split(/\/,$b[-1]);
print
"$c[0]\n";
这是split切割字符串得到的。

Perl split函数
Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中。这个Perl
split函数使用规则表达式(RE),如果未特定则工作在$_变量上。
Perl split函数可以这样使用:
$info="Caine:Michael:Actor:14,LeafyDrive";
@personal=split(/:/,$info);
其结果是:@personal=("Caine","Michael","Actor","14,LeafyDrive");
◆如果我们已经把信息存放在$_变量中,那么可以这样:
@personal=split(/:/);
如果各个域被任何数量的冒号分隔,可以用RE代码进行分割:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:+/);
其结果是:@personal=("Capes","Geoff","Shotputter","BigAvenue");
但是下面的代码:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:/);
的结果是:@personal=("Capes","Geoff","","Shotputter","","","BigAvenue");
◆这个Perl split函数中单词可以被分割成字符,句子可以被分割成单词,段落可以被分割成句子:
@chars=split(//,$word);
@words=split(//,$sentence);
@sentences=split(/\/,$paragraph);
在第一句中,空字符串在每个字符间匹配,所以@chars数组是一个字符的数组。>>
//之间的部分表示split用到的正则表达式(或者说分隔法则)
\s是一种通配符,代表空格
+代表重复一次或者一次以上。
所以,\s+代表一个或者一个以上的空格。
split(/\s+/,$line)表示把字符串$line,按空格为界分开。

public static void main(String[] args) { int[] nums = {1,2,4,5}; String str = ""; for (int i = 0; i < numslength; i++) { str += nums[i]; } Systemoutprintln(str); }

index的用法师$line1必须完全包含$line2里面的字符才会产生>=0的值,假设你的$line1是abc,$line2是b,则你这句话是必然可以输出$line1的,而如果你的$line1是abc,你的$line2是bcd,则index的返回是-1。很可能你的$line2有$line1里面不包含的字符,则这个if就成立不了。

用perl中的截取函数substr 用法 substr($a,0,4)其中$a是要切的,如你说的474,从第0位起向 后切四个字符 perl -e 'my $a=474000895745; my $b=substr($a,0,4);print "$b\n";' 4740

很显然,你的思路就是错的,你要是的相同,你又用了匹配的方法,匹配的话只要包含了就可以匹配上,如ABC12,ABC是能匹配的。所以思路应该是强制转换成小写,判断字符串相等(eq),当然转成大写也是一样的。
open FA,"<A" || die"cannot open A:$!";
while(<FA>){
chomp;
my @a=split;
open FB,"<B" || die"cannot open B:$!";
while(<FB>){
chomp;
my @b=split;
print"$a[0]\t$a[1]\t$b[0]\t$b[1]\n" if (lc($a[1] eq lc($b[1]);
}
}
close FA;
close FB;

如果第二列的值是惟一的(就是说每一行都不同),建议使用哈希,特别是当你的文件特别大的时候。我也是做这个的,深有体会。
open FA,"<A" || die"cannot open A:$!";
open FB,"<B" || die"cannot open B:$!";
my %A;
while(<FA>){
chomp;
my @a=split;
my $key=lc($a[1]);
$A{$key}=$_;
}
while(<FB>){
chomp;
my @b=split;
my $key=lc($b[1]);
print"$_\t$A{$key}\n" if $A{$key};
}
close FA;
close FB;
希望对你有用

差距很大
GTX1060撑死也就GTX980的性能
RX 480和顶级非公GTX970差不多
而GTX1070比GTX980TI还强一点  
二者差距百分之40

不可变的String对象

在Java中,String对象是不可变的(Immutable)。在代码中,可以创建多个某一个String对象的别名。但是这些别名都是的引用是相同的。

比如s1和s2都是”droidyuecom”对象的别名,别名保存着到真实对象的引用。所以s1 = s2。


String s1 = "droidyuecom";String s2 = s1;Systemoutprintln("s1 and s2 has the same reference =" + (s1 == s2));

Java中仅有的重载运算符

在Java中,唯一被重载的运算符就是字符串的拼接相关的。+,+=。除此之外,Java设计者不允许重载其他的运算符。

#!/usr/bin/perl
print "input file name\n";
$input = <STDIN>;
print "output file name\n";
$output = <STDIN>;
print "phase to search \n";
$phase = <STDIN>;
chomp($phase);
open(IN,"<$input")||die "fail to open $input";
open(OUT,">$output");
while($line = <IN>){
chomp($line);
if($line =~ /$phase/){
# print $line;
select OUT;
print $line;
print "\n";
}
}
close(IN);
close(OUT);
测试过的,没有问题,input,output为输入输出文件,phase为特定字符串。
希望对你有帮助
2即字符串都是用逗号分隔的,由于每行的数据很长,我只想要第30个逗号以前的数据。使用perl怎么实现?
这个用awk很方便就能实现,用perl的话可以这样
#!/usr/bin/perl
print "input file name\n";
$input = <STDIN>;
print "output file name\n";
$output = <STDIN>;
print "phase to search \n";
$phase = <STDIN>;
chomp($phase);
open(IN,"<$input")||die "fail to open $input";
open(OUT,">$output");
select OUT;
while($line = <IN>){
chomp($line);
if($line =~ /$phase/){
@array=split(/,/,$line);
for($i=0;$i<30;$i++){
print $array[$i];
print ",";
}
print "\n";
}
}
select STDOUT;
close(IN);
close(OUT);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13383442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存