将int数组转为List集合
int[] codeRange = {254, 252, 248, 240, 224, 192, 128, 0};
方式一:
List<Integer> list = new ArrayList<Integer>();
list.add(254);
list.add(252);
list.add(248);
list.add(240);
list.add(224);
list.add(192);
list.add(128);
list.add(0);
方式二:
List<Integer> list = Arrays.stream(codeRange).boxed().collect(Collectors.toList);
方式一和方式二的结果等价
对于字符串数组array转为List数组:
List<Integer> list = Arrays.stream(array).collect(Collectors.toList);
附上编程题:处理数据时,注意类型匹配。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
//私网IP范围是:
//10.0.0.0~10.255.255.255
//172.16.0.0~172.31.255.255
//192.168.0.0~192.168.255.255
//子网掩码为二进制下前面是连续的1,然后全是0。(例如:255.255.255.32就是一个非法的掩码)
//注意二进制下全是1或者全是0均为非法
//注意:
//1. 类似于【0.*.*.*】的IP地址不属于上述输入的任意一类,也不属于不合法ip地址,计数时可以忽略
//2. 私有IP地址和A,B,C,D,E类地址是不冲突的
//输出:统计A、B、C、D、E、错误IP地址或错误掩码、私有IP的个数,之间以空格隔开。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] count =new int[]{0,0,0,0,0,0,0};
while(sc.hasNext()){
String[] data = sc.nextLine().split("~");
String[] ipstr = data[0].split("\\.");
Boolean isTrue = true;
//判断IP首字母是否为0或IP是否为空
if(Integer.parseInt(ipstr[0])==0){
continue;
}else{
for(int i=0;i<ipstr.length;i++){
if(ipstr[i]=="" || ipstr[i].length()<=0){
isTrue=false;
}
}
}
//判断掩码是否合法
// int[] codeRange = {254, 252, 248, 240, 224, 192, 128, 0};
// List<Integer> list = new ArrayList<Integer>();
// list.add(254);
// list.add(252);
// list.add(248);
// list.add(240);
// list.add(224);
// list.add(192);
// list.add(128);
// list.add(0);
if(isTrue){
int[] codeRange = {254, 252, 248, 240, 224, 192, 128, 0};
List<Integer> list = Arrays.stream(codeRange).boxed().collect(Collectors.toList());//int数组转化为list
// List list = new ArrayList<>(codeRange.length);
// Collections.addAll(list, codeRange);
String[] codestr = data[1].split("\\.");
if("255".equals(codestr[0])){
if("255".equals(codestr[1])){
if("255".equals(codestr[2])){
if("255".equals(codestr[3])){
isTrue=false;
}else if(list.contains(Integer.parseInt(codestr[3]))){
isTrue=true;
}else{
isTrue=false;
}
}else if(list.contains(Integer.parseInt(codestr[2]))){
if(Integer.parseInt(codestr[3])==0){
isTrue=true;
}else{
isTrue=false;
}
}else{
isTrue=false;
}
}else if(list.contains(Integer.parseInt(codestr[1]))){
if(Integer.parseInt(codestr[2])==0 && Integer.parseInt(codestr[3])==0){
isTrue=true;
}else{
isTrue=false;
}
}else{
isTrue=false;
}
}else if(list.contains(Integer.parseInt(codestr[0]))){
if(Integer.parseInt(codestr[0])==0){
isTrue=false;
}else{
if(Integer.parseInt(codestr[1])==0 && Integer.parseInt(codestr[2])==0 &&Integer.parseInt(codestr[3])==0 ){
isTrue=true;
}else{
isTrue=false;
}
}
}else{
isTrue=false;
}
}
统计A0、B1、C2、D3、E4、错误IP地址或错误掩码5、私有IP的个数6,之间以空格隔开。
A类地址1.0.0.0~126.255.255.255;
B类地址128.0.0.0~191.255.255.255;
C类地址192.0.0.0~223.255.255.255;
D类地址224.0.0.0~239.255.255.255;
E类地址240.0.0.0~255.255.255.255
if(isTrue){
int first = Integer.parseInt(ipstr[0]);
int second = Integer.parseInt(ipstr[1]);
if(first>=1 && first<=126){
count[0]++;
}else if(first>=128 && first<=191){
count[1]++;
}else if(first>=192 && first<=223){
count[2]++;
}else if(first>=224 && first<=239){
count[3]++;
}else if(first>=240 && first<=255){
count[4]++;
}
//私网IP范围是:
//10.0.0.0~10.255.255.255
//172.16.0.0~172.31.255.255
//192.168.0.0~192.168.255.255
if(first==192 && second==168){
count[6]++;
}
if(first==172){
if(second>=16 && second<=31){
count[6]++;
}
}
if(first==10){
count[6]++;
}
}else{
count[5]++;
}
//System.out.println(count[0]+" "+count[1]+" "+count[2]+" "+count[3]+" "+count[4]+" "+count[5]+" "+count[6]);
}
System.out.println(count[0]+" "+count[1]+" "+count[2]+" "+count[3]+" "+count[4]+" "+count[5]+" "+count[6]);
}
}