java虚拟路由器_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 routerInfoMap = new HashMap();
/**
* 载入路由表规则:
* 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 entry = (Entry)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\"?>"
+"router1";
assertEquals(false, routerService.loadRule(routerRule));
}
public void testcase2() {
RouterService routerService = new RouterService();
String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"13567";
assertEquals(false, routerService.loadRule(routerRule));
}
public void testcase3() {
RouterService routerService = new RouterService();
String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"13567router1"
+"13567router2";
assertEquals(false, routerService.loadRule(routerRule));
}
public void testcase4() {
RouterService routerService = new RouterService();
String routerRule = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"13562router1";
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\"?>"
+"13562router1"
+"135627router2";
assertEquals(true, routerService.loadRule(routerRule));
assertEquals("router2", routerService.selRouter("13562779908"));
}
}
测试结果:
java虚拟路由器_Java实现模拟路由功能相关推荐
- java基础多线程抢红包_java多线程模拟抢红包功能
今天有朋友问我一道面试题,有5个人抢5个红包,可重复抢,用多线程程序实现,实现方式有多种,分享一下我的思路:应用了阻塞队列的特性. /** * Created by zhanglinqiang on ...
- java udp聊天_Java UDP实现聊天功能代码
我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,服务器端需要阻塞式等待客户端的连接.而UDP则是可以直接向目的地址的目的端口上发送数据包,由于它只负责发送出去就好,不管 ...
- java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程
java lambda函数 " Java SE 8新功能浏览 "系列的这篇文章将深入了解Lambda表达式 . 我将向您展示Lambda表达式的几种不同用法. 它们都具有功能接口的 ...
- java web购物车_java web开发——购物车功能实现
之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3 ...
- java web 分页_Java Web(十一) 分页功能的实现
虽然现在有很多好用的框架,对分页进行支持,很简单的就把分页的效果做出来,但是如果自己手写是一个怎样的流程的?今天就来说说它,手动实现分页效果. --WH 一.分页的思路 首先我们得知道写分页代码时的思 ...
- java 设计模式 路由器_java设计模式2————工厂模式
java设计模式2----工厂模式 1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展 ...
- java ftp服务器_Java实现FTP服务器功能实例代码
FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议.在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Downl ...
- java实现抽奖_Java实现简单抽奖功能界面
本文实例为大家分享了Java实现简单抽奖功能的具体代码,供大家参考,具体内容如下 要求:定义文本框添加姓名,将姓名存储并且在界面中可见,点击抽奖按钮进行抽奖并输出最后的中奖得主. 关于抽奖当然需要用到 ...
- java环形数组_Java数组模拟环形队列
1.假溢出 系统作为队列用的存储区还没有满,但队列却发生了溢出,我们把这种现象称为"假溢出". 因为队列遵从从队尾存入数据,从队头取数据,所以红框部分的空间就不能继续存入新的数据 ...
最新文章
- HibernateSessionFactory的用法
- Kubernetes — Pod
- Pots POJ - 3414
- hdu 2680 Choose the best route
- 关于MySql中自增长id设置初始值
- CodeForces - 1525D Armchairs(dp)
- jena java_eclipse导入jena源码
- c++ socket线程池_从连接器组件看Tomcat的线程模型——NIO模式
- 天池实验室-Task04-Python数据分析:从0完成一个数据分析实战
- 修改Android中的文件权限
- Spring在多线程中bean的注入问题
- 阿里云云计算 29 AS的原理
- MindManager_10 思维导图-软件下载
- json对象转map集合(json转map最快的方法)
- python可以用于工业机器人编程与操作_如何实现工业机器人编程抓取
- be [prove] a great boon to [for]
- 一图看懂中国AI战场局势:只有百度和华为真的在做AI
- 在华为之后,再有中国芯片赶超美国芯片,美国的图谋将再次失败
- 使用电源管理模块有效控制GaN功率放大器的电源开关
- 西南计算机维修技术0240,0240 2016《计算机维修技术》西南大学网上作业题及答案...
热门文章
- 第三次学JAVA再学不好就吃翔(part101)--IO流
- 探索Julia(part1)--Julia初识
- 程序员面试金典适合java么,【程序员面试金典】面试题 01.03. URL化(示例代码)
- SAP UI5 应用开发教程之三十八 - 使用 Chrome 开发者工具查看程序执行出错时的上下文信息
- RxJs SwitchMap 学习笔记
- SAP Spartacus org unit table不同区域focus然后回车的行为差异
- Create new SAP DDL view and click finish in wizard
- SAP CRM WebClient UI上note下拉列表里类型的过滤逻辑
- SAP CRM产品主数据里的七种ID
- 使用SAP portal service创建Fiori Launchpad