本文实现根据路由表适配最优的号段,选择路由器。选择路由的规则:

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实现模拟路由功能相关推荐

  1. java基础多线程抢红包_java多线程模拟抢红包功能

    今天有朋友问我一道面试题,有5个人抢5个红包,可重复抢,用多线程程序实现,实现方式有多种,分享一下我的思路:应用了阻塞队列的特性. /** * Created by zhanglinqiang on ...

  2. java udp聊天_Java UDP实现聊天功能代码

    我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,服务器端需要阻塞式等待客户端的连接.而UDP则是可以直接向目的地址的目的端口上发送数据包,由于它只负责发送出去就好,不管 ...

  3. java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程

    java lambda函数 " Java SE 8新功能浏览 "系列的这篇文章将深入了解Lambda表达式 . 我将向您展示Lambda表达式的几种不同用法. 它们都具有功能接口的 ...

  4. java web购物车_java web开发——购物车功能实现

    之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3 ...

  5. java web 分页_Java Web(十一) 分页功能的实现

    虽然现在有很多好用的框架,对分页进行支持,很简单的就把分页的效果做出来,但是如果自己手写是一个怎样的流程的?今天就来说说它,手动实现分页效果. --WH 一.分页的思路 首先我们得知道写分页代码时的思 ...

  6. java 设计模式 路由器_java设计模式2————工厂模式

    java设计模式2----工厂模式 1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展 ...

  7. java ftp服务器_Java实现FTP服务器功能实例代码

    FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议.在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Downl ...

  8. java实现抽奖_Java实现简单抽奖功能界面

    本文实例为大家分享了Java实现简单抽奖功能的具体代码,供大家参考,具体内容如下 要求:定义文本框添加姓名,将姓名存储并且在界面中可见,点击抽奖按钮进行抽奖并输出最后的中奖得主. 关于抽奖当然需要用到 ...

  9. java环形数组_Java数组模拟环形队列

    1.假溢出 ​系统作为队列用的存储区还没有满,但队列却发生了溢出,我们把这种现象称为"假溢出". 因为队列遵从从队尾存入数据,从队头取数据,所以红框部分的空间就不能继续存入新的数据 ...

最新文章

  1. HibernateSessionFactory的用法
  2. Kubernetes — Pod
  3. Pots POJ - 3414
  4. hdu 2680 Choose the best route
  5. 关于MySql中自增长id设置初始值
  6. CodeForces - 1525D Armchairs(dp)
  7. jena java_eclipse导入jena源码
  8. c++ socket线程池_从连接器组件看Tomcat的线程模型——NIO模式
  9. 天池实验室-Task04-Python数据分析:从0完成一个数据分析实战
  10. 修改Android中的文件权限
  11. Spring在多线程中bean的注入问题
  12. 阿里云云计算 29 AS的原理
  13. MindManager_10 思维导图-软件下载
  14. json对象转map集合(json转map最快的方法)
  15. python可以用于工业机器人编程与操作_如何实现工业机器人编程抓取
  16. be [prove] a great boon to [for]
  17. 一图看懂中国AI战场局势:只有百度和华为真的在做AI
  18. 在华为之后,再有中国芯片赶超美国芯片,美国的图谋将再次失败
  19. 使用电源管理模块有效控制GaN功率放大器的电源开关
  20. 西南计算机维修技术0240,0240 2016《计算机维修技术》西南大学网上作业题及答案...

热门文章

  1. 第三次学JAVA再学不好就吃翔(part101)--IO流
  2. 探索Julia(part1)--Julia初识
  3. 程序员面试金典适合java么,【程序员面试金典】面试题 01.03. URL化(示例代码)
  4. SAP UI5 应用开发教程之三十八 - 使用 Chrome 开发者工具查看程序执行出错时的上下文信息
  5. RxJs SwitchMap 学习笔记
  6. SAP Spartacus org unit table不同区域focus然后回车的行为差异
  7. Create new SAP DDL view and click finish in wizard
  8. SAP CRM WebClient UI上note下拉列表里类型的过滤逻辑
  9. SAP CRM产品主数据里的七种ID
  10. 使用SAP portal service创建Fiori Launchpad