import java.io.*;public class TestEightTwo {

public static void main(String[] args) {
String newString="" ;
String newString1="";
StringBuffer strBuffer =new StringBuffer();
StringBuilder strBulider = new StringBuilder();
try {
File newFile = new File("a.txt");
FileReader fr = new FileReader(newFile);
BufferedReader br = new BufferedReader(fr);
File file = new File("b.txt");
FileWriter fw = new FileWriter(file);
PrintWriter pw = new PrintWriter(fw);
String data = ""; while ((data = br.readLine())!= null) {
//data = br.readLine();
String data1 = data.replaceAll("(\\d) +", "$1,");
//String[] str=data.split("^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])(\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])){3}$");
//String[] str=data.split("^(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))(\\.|,)){1,3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$");
String[] str= data1.split(",");
String[] str1=str[0].split("\\.");
String[] str2=str[1].split("\\.");
for(int i=0;i<str1.length;i++){
switch (str1[i].length()){
case 1:{
str1[i]="00"+str1[i];break;
}
case 2: {
str1[i]="0"+str1[i];break;
}
}
strBulider.append(str1[i]);
}
//for(int j=0;j<str.length;j++){
//newString=newString+str[j];

//}
//strBuffer.append(str1[0]).append(str1[1]).append(str1[2]).append(str1[3]);
//newString = new String(strBuffer);
//newString =newString.replaceAll("^(\\d{3})$","$1.");
System.out.println(str1);
System.out.print(strBulider);
//System.out.println(str1[2]);
for(int i=0;i<str2.length;i++){
switch (str2[i].length()){
case 1:{
str2[i]="00"+str2[i];break;
}
case 2: {
str2[i]="0"+str2[i];break;
}
}
}

//pw.println(data);

}
pw.flush();
br.close();
pw.close();
} catch (IOException e) {
e.printStackTrace();
} }}
a.txt 是个存储IP地址的文件有起誓IP 和截止IP 和所在地区
3个字段
想把每个IP位不满3位的都用0补满
注释的部分都实验过了 
要是不把已经分割好的每IP 的IP位补0后连接成字符串
就不是死循环
不知道什么原因

解决方案 »

  1.   

    String data = null;这么设置!!!不然你的永远不是null了~
    因为String data = ""; 你这么设置的
      

  2.   


    String data = ""; //就这里改为String data = null;while ((data = br.readLine())!= null) { 
      

  3.   

    我不是很同意楼上的关点,br.readLine()方法在读到最后的时候,也就是说没有数据时会返回null,并把这个null付给data,所以问题不在这
      

  4.   

    我拿你程序什么都不改 运行没有出现死循环 很奇怪。。
    文件格式是不是这样的啊:
    192.168.1.1 192.168.1.50 bj
    192.168.2.1 192.168.2.79 bj
    .....
      

  5.   

    我觉得是不是 你处理完一个IP以后 那个连接字符串的StringBulider的对象没有把内容清空 而当数据量很大的时候 该对象的内容很多 速度比较慢
    个人认为应该处理完一个IP 将它写入另一个文件以后 把连接字符串对象里面内容清空 再去处理下一个IP