Java学习——编程作业(2)IP地址判定

【问题描述】

【问题描述】现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个地址串中没有空格出现(因为要表示成一个32数字)。>现在需要你用程序来判断IP是否合法。
【输入形式】输入一个ip地址
【输出形式】返回判断的结果YES or NO
【样例输入】
10.138.15.1
【样例输出】
YES

【问题分析】

  • 一开始的时候总是C++惯性思维,输入4个整数以及三个字符,判断4个整数是否都在0-255之间,即cin>>A>>c;就是输入一个整数和一个字符’.’,但是在Java中会报错,因为其可能会将192.168.1.25中的192.168看作浮点数,然而用的是接收整数的函数:nextInt()。
  • 此处应该用字符串来读取数据,然后利用split函数将其进行劈分成4个子串,将每个子串转为数字,判断其是否在0-255之间。

【代码】

  • 错误代码:
import java.util.*;

public class Ex3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int A;
		char c;
		A=in.nextInt();
		if(A<0 || A>255)
		{
			System.out.println("NO");
			return ;
		}
		for(int i=0;i<3;i++)
		{
			c=in.next().charAt(0);
			A=in.nextInt();
			if(A<0 || A>255)
			{
				System.out.println("NO");
				return;
			}
		}
		System.out.println("YES");
	}

}

正确代码:

import java.util.*;

public class Ex3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		String IP=in.nextLine();
		String[] A=IP.split("\\.");
		int num;
		for(int i=0;i<A.length;i++)
		{
			num=Integer.valueOf(A[i]);
			if(num<0||num>255)
			{
				System.out.println("NO");
				return;
			}
		}
		System.out.println("YES");
	}

}

【学习】

数字与字符串转换:

  • 数字转字符串:str=String.valueOf(12);
  • 字符串转数字:num=Integer.valueOf(“12”);

字符串劈分函数split的用法:

  1. split有两种定义方式:
  • split(String regex):String[]-string,其中regex是要分隔的字符。
    String[] str1=str.split(",");
  • split(String regex,int limit):String[]-string,其中regex是分隔符,limit是要限制分隔后的数量。这两点都与Python中的split函数类似。
  1. 对于特殊字符: | ^ $ * . ( ) \ / ,必须在前面加上\进行转义。注意\要用三个\,也就是其必须写成split("\\\\");
  2. 逐个分隔字符串:split("");里面是空,而不是空格,其会将字符串分割为许多只含一个字符的子串。
  3. 同时使用多个分隔符进行分隔。split("[分隔符分隔符]"),这里只要碰到[]中的任何一个分隔符都会进行字符串分隔。
  4. 用多个空格分隔符进行分隔。split("{1,}");就是用一个或者以上的空格进行分隔,split("{2,}");即用两个或者以上的空格进行分隔。

【参考链接】

  1. https://liangyuanshao.blog.csdn.net/article/details/115022570
  2. https://jingyan.baidu.com/article/9989c746c5d707f648ecfe05.html
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值