把以下IP存入一个txt文件,编写程序把这些IP按数值大小,从小到达排序并打印出来。
61.54.231.245
61.54.231.9
61.54.231.246
61.54.231.48
61.53.231.249
方法:1、IP地址取值0~255,可以将其看作一个四位的256进制数。a.b.c.d=a*256^3+b*256^2+c*256+d,比较转换后的数即可
下面是我的代码:
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.List;
- import java.util.Collections;
- public class Demo {
- public static void main(String[] args) {
- // 定义文件地址
- File file=new File("D:\\test\\exam\\source\\IP.txt");
- // 创建集合,读取文件内容存入集合,每一行字符串存作一个元素
- List<String> list=new ArrayList();
- BufferedReader bufr=null;
- try {
- bufr=new BufferedReader(new FileReader(file));
- String line=null;
- while ((line=bufr.readLine())!=null) {
- list.add(line);
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- // 关闭流
- if (bufr!=null) {
- try {
- bufr.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- // 调用比较器排序
- Collections.sort(list, new Mycomparator());
- // 遍历输出排序后结果
- for (String string : list) {
- System.out.println(string);
- }
- }
- }
- //自定义的比较器
- class Mycomparator implements Comparator<String>{
- @Override
- public int compare(String o1, String o2) {
- // TODO Auto-generated method stub
- int number1=toNumber(o1);
- int number2=toNumber(o2);
- return number1-number2;
- }
- // 对IP地址分割,看作256进制的四位数,转化成十进制数的方法
- private int toNumber(String o) {
- String[] str=o.split(".");
- int sum = 0;
- // 问题出在这里,下面我对分割后的数组打印其长度,值全都是0
- // System.out.println(str.length);
- for (int i = 0; i < str.length; i++) {
- sum=sum*256+Integer.parseInt(str[i]);
- }
- return sum;
- }
-
- }
复制代码
问题出在比较器这边,最后一行的注释说明了。。。歇菜,看不出哪有问题
|