成都心情

  BlogJava :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  98 随笔 :: 2 文章 :: 501 评论 :: 1 Trackbacks
    前几天就在着手写本文了。情景是这样的,一个“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
posted on 2005-10-25 11:17 Rosen 阅读(3067) 评论(5)  编辑  收藏 所属分类: Java 基础

评论

# 218.75.13.198 2005-12-27 14:49 浙江省台州市电信
000000000000  回复  更多评论
  

# re: Jakarta-ORO 分解 IP 地址 2005-12-27 14:49 浙江省台州市电信
000  回复  更多评论
  

# re: Jakarta-ORO 分解 IP 地址 2006-07-27 14:19 zhuam
搜索ORO 到了此地, 告诉你把 split 方法里面分割方式不是普通的字符串规则,她是需要遵循 正则规则的。这个你见 javadoc 就能知道.....

  回复  更多评论
  

# re: Jakarta-ORO 分解 IP 地址 2006-07-27 20:00 Rosen
@zhuam
喔,谢谢你的回复。之前的认识也纠正过来了。javadoc,没仔细看。 :(  回复  更多评论
  

# re: Jakarta-ORO 分解 IP 地址 2006-08-17 11:51 ftr
thanks  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问