Jakarta-ORO 分解 IP 地址

    前几天就在着手写本文了。情景是这样的,一个“192.168.0.1”的 IP 地址,按照“.”标志分解成四段,考虑片刻打算以 Jakarta-ORO 实现。
    但是写着写着,发现用 String.split(String arg0) 方法也可以实现需求。遂陷入了迷茫,而后转念一想,鸡肋就鸡肋吧,说不定下次会在其他地方用到。
   
    先来看看 String.split(String arg0) 是如何实现的,下面是最想当然的写法:

public   class  SplitTest {

    

public   static   void  main( String[] args ){
        String ip 
=   " 192.168.0.1 " ;
        String[] ips 
=  ip.split( " . " );
        System.out.println(ips.length);
    }
}



    嗯,测试以后,控制台打印出“0”,那这样一来 String.split(String arg0) 岂不是不能实现需求咯?且慢,我们如果加上转义符会怎样呢?

public   class  SplitTest {

    

public   static   void  main( String[] args ){
        String ip 
=   " 192.168.0.1 " ;
        String[] ips 
=  ip.split( " \\. " );
        System.out.println(ips.length);
    }
}



    这次终于如愿以偿了,控制台打印出“4”。至于为什么会这样,我也没有深入探索,和朋友交流后大概是说“.”在 Java 中有特殊含义,如果要进行正则匹配,就必须转义一下。
   
    转入 Jakarta-ORO,下面看看它是如何进行匹配的:

import  org.apache.oro.text.regex.MalformedPatternException;
import  org.apache.oro.text.regex.MatchResult;
import  org.apache.oro.text.regex.Pattern;
import  org.apache.oro.text.regex.PatternCompiler;
import  org.apache.oro.text.regex.PatternMatcher;
import  org.apache.oro.text.regex.Perl5Compiler;
import  org.apache.oro.text.regex.Perl5Matcher;


public   class  SplitTest {

    

public   static   void  main( String[] args )  throws  MalformedPatternException{
        String ip 
=   " 192.168.0.1 " ;
        PatternCompiler pc 
=   new  Perl5Compiler();
        PatternMatcher pm 
=   new  Perl5Matcher();
        Pattern pattern 
=  pc
                .compile(
" ([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}) " );
        pm.contains(ip, pattern);
        MatchResult mr 

=  pm.getMatch();
        
int  ip0  =  Integer.parseInt(mr.group( 1 ));
        
int  ip1  =  Integer.parseInt(mr.group( 2 ));
        
int  ip2  =  Integer.parseInt(mr.group( 3 ));
        
int  ip3  =  Integer.parseInt(mr.group( 4 ));
                System.out.println(ip0
+ "   " + ip1 + "   " + ip2 + "   " + ip3);
    }
}



    关于 Jakarta-ORO 更多的信息,网上一搜一大堆,在此就不进行细致的代码解释了。



请注意!引用、转贴本文应注明原作者:Rosen Jiang 以及出处: http://www.blogjava.net/rosen 16729.html

Rosen 2005-10-25 11:17 发表评论



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值