判断一个字符串是否是ip地址的实现方法
2017-07-17 16:32
555 查看
最近在学习java,研究一些算法,找些联系题,自己去下手试试。这里记录下学习历程,也增强自己的记忆。初学者,见笑了。从开始判断一个字符串是不是正规ipv4的地址开始练习吧,初步代码如下:
public class isIpv4{
public String cutblank(String str){
//如果字符串前有空格
while(str.startsWith(""))
{
str= str.substring(1,str.length()).trim();
}
//去掉字符串后的空格
while(str.endsWith(""))
{
str= str.substring(0,str.length()-1).trim();
System.out.println(str);
}
return str;
}
public boolean isipv4(String ip){
//判断是否是一个ip地址
boolean a=false;
ip = this.cutblank(ip);
boolean flag =ip.matches("\\d{1,3}\\.d{1,3}\\.d{1,3}\\.d{1,3}");
if(flag)
{
String s[] = ip.split("\\.");
int i1= Integer.parseInt(s[0]);
int i2= Integer.parseInt(s[1]);
System.out.println(i2);
int i3= Integer.parseInt(s[2]);
int i4= Integer.parseInt(s[3]);
if(i1>0&&i1<256&&i2<256&&i3<256&&i4<256)
a = true;
}
return a;
}
public static void main(String[] args) throws Exception {
String s= " 122.005.133.244 ";
isIpv4 isip = new isIpv4();
boolean check = isip.isipv4(s);
System.out.println(check);
System.out.println(check? "是一个常规ipv4地址" : "不是一个ip地址");
}
}
运行第一次的时候出错:
调试了半天,问题还是差不出来,干脆屏蔽这块空白字符处理的代码继续
屏蔽掉字符处理后还是报错,各种打印值后发现正则写的有点问题
更正:
boolean flag =ip.matches("\\d{1,3}\\.d{1,3}\\.d{1,3}\\.d{1,3}");
更正后继续运行调试,终于打印出结果,没有报错信息了
小小高兴下,继续吧
继续打开字符处理屏蔽找出字符越界的问题,一直没查出报错原因,这里留一个坑。后来想想,我只是要减去空格啊,为啥只处理头尾呢,不如直接trim()了啊,现成的api啊。这里被自己的笨到了
继续改了:
public class isIpv4{
public boolean isipv4(String ip){
//判断是否是一个ip地址
boolean a=false;
ip = cutblank(ip);
boolean flag =ip.matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
if(flag)
{
String s[] = ip.split("\\.");
int i1= Integer.parseInt(s[0]);
int i2= Integer.parseInt(s[1]);
System.out.println(i2);
int i3= Integer.parseInt(s[2]);
int i4= Integer.parseInt(s[3]);
if(i1>0&&i1<256&&i2<256&&i3<256&&i4<256)
a = true;
}
return a;
}
public String cutblank(String str){
String str1=str.trim();
/*
//如果字符串前有空格
while(str.startsWith(""))
{
str= str.substring(1,str.length()).trim();
}
//去掉字符串后的空格
while(str.endsWith(""))
{
str= str.substring(0,str.length()-1).trim();
System.out.println(str);
}
*/
System.out.println(str1);
return str1;
}
public static void main(String[] args) throws Exception {
String s = " 122.005.133.244 ";
isIpv4 isip = new isIpv4();
boolean check = isip.isipv4(s);
System.out.println(check);
System.out.println(check? "是一个常规ipv4地址" : "不是一个ip地址");
}
}
测试了下,结果妥妥的:
测试 ” 122.005.133.244”
测试:" a2..451.3 4 "
这里把字符串转换成integer的好处就是避免去判断子串中第一个字符不为0的情况,第一个和第二个不能同时为0的情况
public class isIpv4{
public String cutblank(String str){
//如果字符串前有空格
while(str.startsWith(""))
{
str= str.substring(1,str.length()).trim();
}
//去掉字符串后的空格
while(str.endsWith(""))
{
str= str.substring(0,str.length()-1).trim();
System.out.println(str);
}
return str;
}
public boolean isipv4(String ip){
//判断是否是一个ip地址
boolean a=false;
ip = this.cutblank(ip);
boolean flag =ip.matches("\\d{1,3}\\.d{1,3}\\.d{1,3}\\.d{1,3}");
if(flag)
{
String s[] = ip.split("\\.");
int i1= Integer.parseInt(s[0]);
int i2= Integer.parseInt(s[1]);
System.out.println(i2);
int i3= Integer.parseInt(s[2]);
int i4= Integer.parseInt(s[3]);
if(i1>0&&i1<256&&i2<256&&i3<256&&i4<256)
a = true;
}
return a;
}
public static void main(String[] args) throws Exception {
String s= " 122.005.133.244 ";
isIpv4 isip = new isIpv4();
boolean check = isip.isipv4(s);
System.out.println(check);
System.out.println(check? "是一个常规ipv4地址" : "不是一个ip地址");
}
}
运行第一次的时候出错:
调试了半天,问题还是差不出来,干脆屏蔽这块空白字符处理的代码继续
屏蔽掉字符处理后还是报错,各种打印值后发现正则写的有点问题
更正:
boolean flag =ip.matches("\\d{1,3}\\.d{1,3}\\.d{1,3}\\.d{1,3}");
更正后继续运行调试,终于打印出结果,没有报错信息了
小小高兴下,继续吧
继续打开字符处理屏蔽找出字符越界的问题,一直没查出报错原因,这里留一个坑。后来想想,我只是要减去空格啊,为啥只处理头尾呢,不如直接trim()了啊,现成的api啊。这里被自己的笨到了
继续改了:
public class isIpv4{
public boolean isipv4(String ip){
//判断是否是一个ip地址
boolean a=false;
ip = cutblank(ip);
boolean flag =ip.matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");
if(flag)
{
String s[] = ip.split("\\.");
int i1= Integer.parseInt(s[0]);
int i2= Integer.parseInt(s[1]);
System.out.println(i2);
int i3= Integer.parseInt(s[2]);
int i4= Integer.parseInt(s[3]);
if(i1>0&&i1<256&&i2<256&&i3<256&&i4<256)
a = true;
}
return a;
}
public String cutblank(String str){
String str1=str.trim();
/*
//如果字符串前有空格
while(str.startsWith(""))
{
str= str.substring(1,str.length()).trim();
}
//去掉字符串后的空格
while(str.endsWith(""))
{
str= str.substring(0,str.length()-1).trim();
System.out.println(str);
}
*/
System.out.println(str1);
return str1;
}
public static void main(String[] args) throws Exception {
String s = " 122.005.133.244 ";
isIpv4 isip = new isIpv4();
boolean check = isip.isipv4(s);
System.out.println(check);
System.out.println(check? "是一个常规ipv4地址" : "不是一个ip地址");
}
}
测试了下,结果妥妥的:
测试 ” 122.005.133.244”
测试:" a2..451.3 4 "
这里把字符串转换成integer的好处就是避免去判断子串中第一个字符不为0的情况,第一个和第二个不能同时为0的情况
相关文章推荐
- Python实现判断一个字符串是否包含子串的方法总结
- 用递归实现判断一个字符串是否是回文的方法
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 用递归实现判断一个字符串是否是回文的方法
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- python实现判断一个字符串是否是合法IP地址
- 在进行C#编程时候,有的时候我们需要判断一个字符串是否是数字字符串,我们可以通过以下两种方法来实现。 【方法一】:使用 try{} catch{} 语句。 我们可以在try语句块中试图
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)--来源CSDN
- C++实现判断一个字符串是否为UTF8或GBK格式的方法
- (转)判断一个字符串是否全是数字的多种方法及其性能比较(C#实现
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- python实现判断一个字符串是否是合法IP地址的示例
- 编写js扩展方法实现判断一个数组中是否包含某个元素
- Asp.Net判断一个字符串是否包含某个字符的最简单方法!(示例)
- [shell]判断一个字符串是否为数字字符串的两种方法(是否为进程号(PID))
- C#实现如何判断一个字符串是否为整数和浮点
- C++常考的上机题型:判断一个字符串是否为回文串(递归实现)