import java.net.*;
import java.io.*;
import java.util.*;
/*
* 第17题:把以下IP存入一个txt文件,编写程序把这些IP按数值大小,从小到达排序并打印出来。
* 61.54.231.245
* 61.54.231.9
* 61.54.231.246
* 61.54.231.48
* 61.53.231.249
* txt存储,读取并排序打印
* */
public class Test17 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileWriter fw=new FileWriter("D:\\java0204\\ip.txt");
fw.write("61.54.231.245"+"\r\n");
fw.write("61.54.231.9"+"\r\n");
fw.write("61.54.231.245"+"\r\n");
fw.write("61.54.231.48"+"\r\n");
fw.write("61.54.231.249"+"\r\n");
fw.close();
BufferedReader bufr=new BufferedReader(new FileReader("D:\\java0204\\ip.txt"));
//定义一个字符串数组用来存储ip字符串
String[] strs=new String[5];
//i是字符串数组的角标,j是两个字符串的第一轮比较结果
int i=0,j;
for(String line=null;(line=bufr.readLine())!=null;)
{
strs[i++]=line;
}
//冒泡排序
for(int m=0;m<strs.length-1;m++)
{
for(int n=0;n<strs.length-m-1;n++)
{
//这里如果两个ip字符串相等就不需要比较了
j=strs[n].compareTo(strs[n+1]);
//如果两个ip字符串不相等就比较
if(j!=0)
{
//比较两个ip字符串的数值形态的大小
if(compareIP(strs[n],strs[n+1])>0)
swap(strs,n,n+1);
}
}
}
//将比较后的ip数组打印出来
for(int x=0;x<strs.length;x++)
{
System.out.println(strs[x]);
}
}
//自定义比较ip值的方法
public static int compareIP(String str1,String str2)
{
int num=0,result=0,count=0,subValue1,subValue2;
while(num<15)
{
//这是个计数器,用来记住“.”的个数和比较次数
count++;
//到第三个点或者说第三次的时候,换种方式取得ip四位数的最后一个数值
if(count==3)
{
subValue1=Integer.parseInt(str1.substring(str1.lastIndexOf(".")+1, str1.length()));
subValue2=Integer.parseInt(str2.substring(str2.lastIndexOf(".")+1, str2.length()));
}else{
subValue1=Integer.parseInt(str1.substring(num, str1.indexOf(".",num)));
subValue2=Integer.parseInt(str2.substring(num, str2.indexOf(".",num)));
}
//如果取得的ip四个数中刚开始都是相等的,就继续取
if(subValue1==subValue2)
{
num+=str1.indexOf(".",num);
num+=count;
}
else if(subValue1>subValue2)
{
result=1;
break;
}
else
{
result=-1;
break;
}
}
return result;
}
public static void swap(String[] strs,int n,int m)
{
String temp=strs[n];
strs[n]=strs[m];
strs[m]=temp;
}
}
下面附上程序运行结果:
整了一晚上,整的我头都晕了--、,之前想过用TreeSet集合和Arrays来比较,但是都不是想要的结果,最后我只好把ip地址值分解,一个数一个数比较。
|
|