您的位置:首页 > 编程语言 > Java开发

Java实现模拟路由功能

2016-10-24 15:05 567 查看
原文地址:http://blog.csdn.net/dotnetstudio/article/details/47206129

本文实现根据路由表适配最优的号段,选择路由器。选择路由的规则:
  1、号段num和网元都不能重复
  2、号段num不能重复
  3、选择号码适配长度最长的网元为路由目的地
RouterService.Java

[java] view
plain copy

package com.discover.router;  

  

import java.util.HashMap;  

import java.util.Iterator;  

import java.util.Map.Entry;  

  

import org.dom4j.Document;  

import org.dom4j.DocumentHelper;  

import org.dom4j.Element;  

  

/** 

 * 简易路由器 

 * @author Administrator 

 * 

 */  

public class RouterService {  

    HashMap<String, String> routerInfoMap = new HashMap<String, String>();  

    /** 

     * 载入路由表规则: 

     * 1、号段num和网元都不能重复 

     * 2、号段num不能重复 

     * @param routerRule 路由规则 

     * @return 

     */  

    public boolean loadRule(String routerRule) {  

        try {  

            Document doc = DocumentHelper.parseText(routerRule);  

            Element routertable = doc.getRootElement();  

            Iterator routerIterator = routertable.elementIterator("router");  

            while(routerIterator.hasNext())  

            {  

                Element router = (Element) routerIterator.next();  

                String num = router.elementTextTrim("num");  

                String net = router.elementTextTrim("net");  

                if(num.isEmpty()||net.isEmpty())  

                {  

                    return false;  

                }  

                  

                if(routerInfoMap.containsKey(num))  

                {  

                    return false;  

                }  

                else {  

                    routerInfoMap.put(num, net);  

                }  

                  

            }  

        } catch (Exception e) {  

            return false;  

        }  

          

        return true;  

    }  

      

    /** 

     * 选择路由 

     * 1、选择号码适配长度最长的网元为路由目的地 

     * @param phone 电话号码 

     * @return 

     */  

    public String selRouter(String phone) {  

        Iterator iterator = routerInfoMap.entrySet().iterator();  

        String num = "";  

        String net = "";  

        while (iterator.hasNext()) {  

            Entry<String, String> entry = (Entry<String, String>)iterator.next();  

            String key = entry.getKey();  

            if(phone.indexOf(key)>-1)  

            {  

                if(key.length()>num.length())  

                {  

                    net = entry.getValue();  

                }  

            }  

        }  

          

        return net;  

    }  

}  

采用JUnit对路由模拟器进行测试
TestRouterService.java

[java] view
plain copy

package com.discover.test;  

  

import junit.framework.TestCase;  

  

import com.discover.router.RouterService;  

  

/** 

 * @author Administrator 

 * 

 */  

public class TestRouterService extends TestCase {  

    public void testcase1() {  

        RouterService routerService = new RouterService();  

        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"  

            +"<routertable><router><num></num><net>router1</net></router></routertable>";  

        assertEquals(false, routerService.loadRule(routerRule));  

    }  

      

    public void testcase2() {  

        RouterService routerService = new RouterService();  

        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"  

            +"<routertable><router><num>13567</num><net></net></router></routertable>";  

        assertEquals(false, routerService.loadRule(routerRule));  

    }  

      

    public void testcase3() {  

        RouterService routerService = new RouterService();  

        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"  

            +"<routertable><router><num>13567</num><net>router1</net></router>"  

        +"<router><num>13567</num><net>router2</net></router></routertable>";  

        assertEquals(false, routerService.loadRule(routerRule));  

    }  

      

    public void testcase4() {  

        RouterService routerService = new RouterService();  

        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"  

            +"<routertable><router><num>13562</num><net>router1</net></router></routertable>";  

        assertEquals(true, routerService.loadRule(routerRule));  

        assertEquals("router1", routerService.selRouter("13562779908"));  

    }  

          

    public void testcase5() {  

        RouterService routerService = new RouterService();  

        String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"  

            +"<routertable><router><num>13562</num><net>router1</net></router>"  

            +"<router><num>135627</num><net>router2</net></router></routertable>";  

        assertEquals(true, routerService.loadRule(routerRule));  

        assertEquals("router2", routerService.selRouter("13562779908"));  

    }  

}  

 测试结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: