IP 解析器(IpParser) test 和 生产环境 实现
注意:之前我maven居然没有引入 StringUtils 的包,然后引入了一个路径类似,但其实包路径不一样的 StringUtils ,居然是划掉的状态,像这样 StringUtils ,这个其实不是我要用的,所以maven检查一下有没有引入就行了
注意2:如果要用list包着map,那么在某些循环的情况下,map需要清空,不然会产生重复数据
这里 RM 要 put into lib 一下,不然web环境下跑 StringUtils 会报错(原来我以为这个包只会影响到项目部署的war,没想到居然还会影响到 IDE 的web运行环境)

test文件
import org.apache.commons.lang.StringUtils; import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern; public class IpParser { public static void main(String args[]) {
String ip = "192.168.1.1\n192.168.1.2\n192.168.1.3";
String result = null; List<String> strList = new ArrayList<>(); if (ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
String[] strings = ip.split(",");
for (String str :
strings) {
strList.add(str);
}
} else if (ip.contains(";") && !ip.contains(",") && !ip.contains("\n") && !ip.contains(" ")) {
String[] strings = ip.split(";");
for (String str :
strings) {
strList.add(str);
}
} else if (ip.contains("\n") || ip.contains(" ")) {
Scanner scanner = new Scanner(ip);
while (scanner.hasNext()) {
strList.add(scanner.next());
}
} else {
System.out.println("请输入正确且统一的分隔符");
System.exit(-1);
} for (String strlt :
strList) { String patternS = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
String patternMinus = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\-(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
String pattern24 = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}[1]\\/[2][4]"; boolean isMatchS = Pattern.matches(patternS, strlt);
boolean isMatchMinus = Pattern.matches(patternMinus, strlt);
boolean isMatch24 = Pattern.matches(pattern24, strlt); if (isMatchS == true) {
result = "S";
// System.out.println("单ip");
} else if (isMatchMinus == true) {
result = "Minus";
// System.out.println("-");
} else if (isMatch24 == true) {
result = "24";
// System.out.println("1/24");
} else {
System.out.println("格式不正确,请重新输入:");
} if ("S".equals(result)) {
System.out.println(strlt);
} else if ("Minus".equals(result)) {
String ipPrefix = StringUtils.substringBeforeLast(strlt, ".");
String ipSuffix = StringUtils.substringAfterLast(strlt, ".");
Integer prefix = Integer.valueOf(StringUtils.substringBefore(ipSuffix, "-"));
Integer suffix = Integer.valueOf(StringUtils.substringAfter(ipSuffix, "-"));
List<String> list = new ArrayList<>();
for (int i = prefix; i <= suffix; i++) {
list.add(ipPrefix + "." + i);
}
for (String lt : list
) {
System.out.println(lt);
} } else if ("24".equals(result)) {
}
}
System.out.println("exit::"); }
}
生产环境文件:
注意在循环里使用map的时候,某些场景下需要重新实例化map,否则会产生重复数据
@RequestMapping(value = "controller/json/AssetsController/newTask/fetchIpList")
@ResponseBody
public BaseResult fetchIpList(String ipgroup) { String ip = ipgroup;
String result = null; List<String> strList = new ArrayList<>();
List resultList = new ArrayList<>();
Map<String, String> map = new HashMap<>(); if (ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
String[] strings = ip.split(",");
for (String str :
strings) {
strList.add(str);
}
} else if (ip.contains(";") && !ip.contains(",") && !ip.contains("\n") && !ip.contains(" ")) {
String[] strings = ip.split(";");
for (String str :
strings) {
strList.add(str);
}
} else if (ip.contains("\n") || ip.contains(" ")) {
Scanner scanner = new Scanner(ip);
while (scanner.hasNext()) {
strList.add(scanner.next());
}
} else if (ip != null && ip != "" && !ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
resultList.add(ip);
return ResultUtil.success().add("data", resultList);
} else {
return ResultUtil.error("请输入正确且统一的分隔符");
} for (String strlt :
strList) { String patternS = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
String patternMinus = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\-(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
String pattern24 = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}[1]\\/[2][4]"; boolean isMatchS = Pattern.matches(patternS, strlt);
boolean isMatchMinus = Pattern.matches(patternMinus, strlt);
boolean isMatch24 = Pattern.matches(pattern24, strlt); if (isMatchS == true) {
result = "S";
} else if (isMatchMinus == true) {
result = "Minus";
} else if (isMatch24 == true) {
result = "24";
} else {
ResultUtil.error("ip格式不正确,请重新输入");
} if ("S".equals(result)) {
map.put("ip", strlt);
resultList.add(map);
map = new HashMap<>();
// 这里要用map实例化重置一下,不然会产生冗余数据
} else if ("Minus".equals(result)) {
String ipPrefix = StringUtils.substringBeforeLast(strlt, ".");
String ipSuffix = StringUtils.substringAfterLast(strlt, ".");
Integer prefix = Integer.valueOf(StringUtils.substringBefore(ipSuffix, "-"));
Integer suffix = Integer.valueOf(StringUtils.substringAfter(ipSuffix, "-"));
for (int i = prefix; i <= suffix; i++) {
map.put("ip", ipPrefix + "." + i);
resultList.add(map);
map = new HashMap<>();
// 这里要用map实例化重置一下,不然会产生冗余数据
}
} else if ("24".equals(result)) {
String ipPrefix = StringUtils.substringBeforeLast(strlt, ".");
for (int i = 1; i <= 254; i++) {
map.put("ip", ipPrefix + "." + i);
resultList.add(map);
map = new HashMap<>();
// 这里要用map实例化重置一下,不然会产生冗余数据
}
}
map = new HashMap<>();
// 这里要用map实例化重置一下,不然会产生冗余数据
}
return ResultUtil.success().add("data", resultList);
}
更新修改(对单个ip如 192.168.1.1 | 192.168.1.1-10 | 192.168.1.1/24 这样的情况进行了处理):
@RequestMapping(value = "controller/json/AssetsController/newTask/fetchIpList")
@ResponseBody
public BaseResult fetchIpList(String ipgroup) { String ip = ipgroup;
String result = null; List<String> strList = new ArrayList<>();
List resultList = new ArrayList<>();
Map<String, String> map = new HashMap<>(); if (ip == null || ip == "") {
return ResultUtil.error("请填入内容");
} else if (ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
String[] strings = ip.split(",");
for (String str :
strings) {
strList.add(str);
}
} else if (ip.contains(";") && !ip.contains(",") && !ip.contains("\n") && !ip.contains(" ")) {
String[] strings = ip.split(";");
for (String str :
strings) {
strList.add(str);
}
} else if (ip.contains("\n") || ip.contains(" ")) {
Scanner scanner = new Scanner(ip);
while (scanner.hasNext()) {
strList.add(scanner.next());
}
} else if (!ip.contains("/") && !ip.contains("-") && !ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
map.put("ip", ip);
resultList.add(map);
return ResultUtil.success().add("data", resultList);
} else if (!ip.contains("/") && !ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
strList.add(ip);
} else if (!ip.contains("-") && !ip.contains(",") && !ip.contains(";") && !ip.contains("\n") && !ip.contains(" ")) {
strList.add(ip);
} else {
return ResultUtil.error("请输入正确且统一的分隔符");
} for (String strlt :
strList) { String patternS = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
String patternMinus = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\-(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))";
String pattern24 = "((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}[1]\\/[2][4]"; boolean isMatchS = Pattern.matches(patternS, strlt);
boolean isMatchMinus = Pattern.matches(patternMinus, strlt);
boolean isMatch24 = Pattern.matches(pattern24, strlt); if (isMatchS == true) {
result = "S";
} else if (isMatchMinus == true) {
result = "Minus";
} else if (isMatch24 == true) {
result = "24";
} else {
ResultUtil.error("ip格式不正确,请重新输入");
} if ("S".equals(result)) {
map.put("ip", strlt);
resultList.add(map);
map = new HashMap<>();
} else if ("Minus".equals(result)) {
String ipPrefix = StringUtils.substringBeforeLast(strlt, ".");
String ipSuffix = StringUtils.substringAfterLast(strlt, ".");
Integer prefix = Integer.valueOf(StringUtils.substringBefore(ipSuffix, "-"));
Integer suffix = Integer.valueOf(StringUtils.substringAfter(ipSuffix, "-"));
for (int i = prefix; i <= suffix; i++) {
map.put("ip", ipPrefix + "." + i);
resultList.add(map);
map = new HashMap<>();
}
} else if ("24".equals(result)) {
String ipPrefix = StringUtils.substringBeforeLast(strlt, ".");
for (int i = 1; i <= 254; i++) {
map.put("ip", ipPrefix + "." + i);
resultList.add(map);
map = new HashMap<>();
}
}
map = new HashMap<>();
}
return ResultUtil.success().add("data", resultList);
}
IP 解析器(IpParser) test 和 生产环境 实现的更多相关文章
- IP工具类-自己动手做个ip解析器
IP工具类-自己动手做个ip解析器 一.资料准备 导入依赖包:
- node npm --save,不同JS解析器的内置全局变量,PROMISE,CONST---ES6
npm --save 当你为你的模块安装一个依赖模块时,正常情况下你得先安装他们(在模块根目录下npm install module-name),然后连同版本号手动将他们添加到模块配置文件packa ...
- 关于生产环境改用G1垃圾收集器的思考
背景 由于我们的业务量非常大,响应延迟要求高.目前沿用的老的ParNew+CMS已经不能支撑业务的需求.平均一台机器在1个月内有1次秒级别的stop the world.对系统来说是个巨大的隐患.所以 ...
- SUSE12Sp3安装配置.net core 生产环境(1)-IP,DNS,网关,SSH,GIT
1.新增用户 sudo useradd 用户名 sudo passwd 用户名 这个时候会提示你输入密码,输入两次密码即可 2.静态 IP 设置 1.设置 IP 地址 sudo vi /etc/sys ...
- 使用gunicorn将django项目部署到生产环境的子目录下,在nginx后端获取客户真实IP地址
生产环境有时,并不是为了一个项目而存在的.毕竟,域名是比较稀有的. 今天遇到这个问题,解决了.作个记录. 并且,如果将django项目部署在Nginx后面,那如何获取用户真实的IP地址呢? 下面就来解 ...
- Tomcat生产环境应用
概要: Tomcat各核心组件认知 Tomcat server.xml 配置详解 Tomcat IO模型介绍 一.Tomcat各组件认知 Tomcat架构说明 Tomcat组件及关系详情介绍 Tomc ...
- 理解Docker(6):若干企业生产环境中的容器网络方案
本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇
背景 NanoProfiler是一个EF Learning Labs出品的免费性能监控类库(即将开源).它的思想和使用方式类似于MiniProfiler的.但是,设计理念有较大差异. MiniProf ...
- .NET C#微信公众号开发远程断点调试(本地远程调试生产环境代码)
最近在做微信公众号开发,由于之前没有接触过,突然发现调试不方便,不方便进行断点跟踪调试.因为微信那边绑定的服务器地址必须是公网地址,但是还是想进行断点调试(毕竟这样太方便了,程序有Bug,一步步断点跟 ...
随机推荐
- chrome中workspace配置达到同步修改本地文件的作用
在前端开发中,我们经常需要在浏览器中进行调试,特别是一些样式的修改,如果你还是先在浏览器elements中调试好在复制到本地文件,那就真的out了. chrome浏览器的workspace功能完全可以 ...
- Python图像识别(聚类)
# -*- coding: utf-8 -*- """ Created on Fri Sep 21 15:37:26 2018 @author: zhen "& ...
- React 组件 API
React 组件 API 在本章节中我们将讨论 React 组件 API.我们将讲解以下7个方法: 设置状态:setState 替换状态:replaceState 设置属性:setProps 替换属性 ...
- TCP是如何实现三次握手的?
什么是三次握手 TCP是网络传输层的协议,提供面向连接的可靠的字节流服务,要通信得先建立连接 所谓三次握手就是指,建立一个TCP连接时,需要CLient与Server发送三个包,确认连接的建立 这一过 ...
- EntityFramework Code-First 简易教程(一)
前言:学习了EF框架这么久,还没有好好总结一番,正好遇到一国外的网站,发现不错,随即翻译过来,一是让自己复习一遍,二是供广大初学者学习,翻译过程中加入了一些自己的理解,如有错误,还请指出,多谢多谢.好 ...
- ODS设计
1.数据调研 2.确定数据范围 需要把上端应用需求与ODS数据范围进行验证,以确保应用所需的数据都已经从业务系统中抽取出来,并且得到了很好的组织,以ER模型表示数据主题关系 3.根据数据范围进行进一步 ...
- PHP支付宝支付开发流程
支付宝开发流程 1.首先我们先谈谈第三方支付 所谓第三方支付就是和一些各大银行签约,并具备一定实力和信誉保障的第三方独立机构提供的交易平台 目前市面上常见的有支付宝,财付通,网银,易宝支付等,网站 ...
- PyQt5--QCheckBox
1 # -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys ...
- Fedora 中多显示器环境下的工作区切换
[Dual monitor workspaces] 默认情况下,fedora中 Gnome 桌面环境在切换工作去的时候,只会在 Primary display 上切换, 其他显示器保持不变.如果要实现 ...
- Excel 怎样去掉单元格中的回车符号
1.同时按下 CTRL+H调出"查找---替换"对话框:2.在查找中输入:按住ALT ,小键盘输入 10 ,然后松开ALT:3.在替换中写入要替换的符号:这样就将回车符换成其他符号 ...