Java实现模拟路由功能
来源:互联网 发布:游戏攻略软件 编辑:程序博客网 时间:2024/06/04 19:02
本文实现根据路由表适配最优的号段,选择路由器。选择路由的规则:
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")); }}
测试结果:
0 0
- Java实现模拟路由功能
- Java实现模拟路由功能
- 模拟路由功能
- 实现wordpress路由功能
- nodeJS实现路由功能
- Linux下实现路由功能
- 原生php 实现路由功能
- nodejs中实现路由功能
- nodejs中实现路由功能
- rabbitmq 路由 java实现
- 路由模拟——路由算法2的实现
- java模拟分页功能
- java模拟登陆功能
- 用java Robot API 模拟实现类似按键精灵功能
- JAVA基础类与对象实现模拟火车站购票功能
- cisco模拟单臂路由实现
- 距离向量路由算法的Java模拟
- 用两块网卡实现网卡路由的功能
- 项目开发中的反思
- unix下errno.h文件声明
- lua 介绍
- Bestcoder Round#49 1001Untitled
- C语言详解+例子2
- Java实现模拟路由功能
- Lua基本语法
- lua 库函数
- hashset()的桶式结构,利用hashset()存储对象,存取速度快
- 重学C++ (二)
- lua - 表
- Foundation框架提供的一些基本对象的用法之字符串对象
- 264 国王的魔镜
- iBook文件的导出