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,一步步断点跟 ...
随机推荐
- cuda中当数组数大于线程数的处理方法
参考stackoverflow一篇帖子的处理方法:https://stackoverflow.com/questions/26913683/different-way-to-index-threads ...
- 【three.js练习程序】创建地球贴图
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- mysql 建立索引的原则(转)
索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则: 1. 在经常用作过滤器的字段上建立索引: 2. ...
- ABP(ASP.NET Boilerplate Project)框架探讨
从官网上下载下来带Module-Zero的abp框架. vs2015打开解决方案. 首先让系统run起来.把webconfig数据库连接改一下.启动程序. 发现报错:“本地语言指定”的错误,之后运行n ...
- 关于npm run build打包后css样式中的图片失效的问题(如background)
平时run dev都能正常显示的css背景图片在npm run build打包后竟然不显示了(写在标签对中的图片都可以正常显示),而且dist/static/img目录下是确实有这张图片的,于是查看打 ...
- MySQL 支持utf8mb4
utf8mb4 utf8mb3 utf8 Refer to The utf8mb4 Character Set The utf8 Character Set (Alias for utf8mb3) M ...
- 转:Sql Server中的表访问方式Table Scan, Index Scan, Index Seek
0.参考文献 Table Scan, Index Scan, Index Seek SQL SERVER – Index Seek vs. Index Scan – Diffefence and Us ...
- 解决web网站被挂马清除方法
案例:某公司一个lamp的服务器网站站点目录下所有文件均被植入了广告脚本如下内容: <script language=javascriptsrc=http://%4%66E%78%72%67%2 ...
- python urllib库
python2和python3中的urllib urllib提供了一个高级的 Web 通信库,支持基本的 Web 协议,如 HTTP.FTP 和 Gopher 协议,同时也支持对本地文件的访问. 具体 ...
- 解决iPhone滑动时滑到另一个层级导致卡顿问题
问题概览: 两个div都可以滑动时,会造成滑动顶层div时,底层div也会跟着滑动.如图示. 解决方法: 添加CSS即可. 代码如下 * { -webkit-overflow-scrolling: t ...