Java实现模拟路由功能
2015-08-02 12:53
561 查看
本文实现根据路由表适配最优的号段,选择路由器。选择路由的规则:
1、号段num和网元都不能重复
2、号段num不能重复
3、选择号码适配长度最长的网元为路由目的地
RouterService.java
采用JUnit对路由模拟器进行测试
TestRouterService.java
测试结果:
1、号段num和网元都不能重复
2、号段num不能重复
3、选择号码适配长度最长的网元为路由目的地
RouterService.java
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
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")); } }
测试结果:
相关文章推荐
- struts2的环境搭建
- 深入理解Java内存模型(七)——总结
- 深入理解Java内存模型(六)——final
- 深入理解Java内存模型(四)——volatile
- 深入理解Java内存模型(三)——顺序一致性
- 深入理解Java内存模型(一)——基础
- 深入理解Java内存模型(五)——锁
- java之super用法
- springmvc+mybatis 的异常处理
- 浅谈JAVA集合框架(转载)_常用的Vector和HashMap
- java并发之ThreadPoolExecutor分析
- Java_Vector类的使用,以及Stack继承Vector,推出的栈的特性
- spring ioc DI 理解
- Spring-Session
- JAVA中文乱码问题的产生和建议解决办法
- Java程序设计之最大公约数和最小公倍数
- Java产生随机数
- Java基础---JAVA基本数据类型,关键字
- Java - Thinking in Java 第5章 初始化与清理
- springAOP模板