把以下IP存入一个txt文件,编写程序把这些IP按数值大小,从小到达排序并打印出来。
61.54.231.245
61.54.231.9
61.54.231.246
61.54.231.48
61.53.231.249
public class Exam7 {
public static void main(String[] args) {
String str = getIp();
Mysort(str);
// System.out.print("ip:" + str);
}
public static String getIp() {
// 定义一个字符读取流,读取txt中的IP
BufferedReader bfr = null;
// 定义一个字符串用来存储读取到IP字符串数据
String line = null;
try {
bfr = new BufferedReader(new FileReader("f:\\exam7.txt"));
// 定义字符缓冲数组
char[] buf = new char[1024];
int len = 0;
while ((len = bfr.read(buf)) != -1) {
// 将读取到的字符数据赋给line
line = new String(buf, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 判断流是否为空,若不为空则关闭字符读取流
if (bfr != null) {
try {
// 调用close方法关闭流对象
bfr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 返回IP字符串数据
return line;
}
public static void Mysort(String str) {
// 第一次替换,给所有的地址段前补两个0,
str = str.replaceAll("(\\d+)", "00$1");
// 第二次替换,去除地址段前多余的0,让每一段都是3位
str = str.replaceAll("0*(\\d{3})", "$1");
// 读取的IP地址字符串中带有换行符,就以换行符来切割字符串,
// windows中的换行符为\r\n,正则表达式中\都以成对的形式出现,所以切割规则为\\r\\n
String[] arr = str.split("\\r\\n");
// 调用数组工具类的sort方法对数组排序
Arrays.sort(arr);
// 遍历数组,打印排序后的IP地址
for (int i = 0; i < arr.length; i++) {
// 第三次替换,排序后的IP地址段中有的前面有多余无效的0,将其去掉
System.out.println(arr[i].replaceAll("0+(\\d+)", "$1"));
}
}
}
|
|