日期:2014-05-20  浏览次数:20850 次

如何在文本内转行
程序如下:
import java.io.*;
import java.util.regex.*;
/*
该程序的功能是:
将IP地址后的空格用“,”代替;
并将不满3位的数字在其前用0补齐。
示例:
61.54.231.9 61.54.231.247 河南省安阳市 红日网吧
061.054.231.009,061.054.231.247,河南省安阳市 红日网吧
*/

class Test8 
{
public static void AddComma() throws IOException
{
FileReader fis=null;
BufferedReader bufIn=null;
FileWriter fos=null;
try{
//打开文件a.txt的输出流
fis=new FileReader("a.txt");
//创建缓冲区,用于存储a.txt
bufIn=new BufferedReader(fis);

//创建文件b.txt,用于保存a.txt处理后的结果
File file=new File("b.txt");
//打开文件b.txt的输入流
fos=new FileWriter(file);

//用于指向从缓冲区读出的一行数据
String line=null;
//用于指向取出的IP及处理后的结果
String part1=null;
//用于指向地址数据
String part2=null;
//匹配IP的正则式
String str1="[[\\d+\\.]{3}[\\d+] +]+";
//匹配地址的正则式
String str2="[\\u4e00-\\u9fa5]+.+";
Pattern p1=Pattern.compile(str1);
Pattern p2=Pattern.compile(str2);

//从缓冲区不断读取数据,每次读一行
while((line=bufIn.readLine())!=null)
{
//取出IP,并用","代替空格
Matcher m1=p1.matcher(line);
m1.find();
part1=m1.group();
part1=part1.replaceAll(" +",",");
//将不满3位的数字用0补齐
part1=part1.replaceAll("(\\d+)","00$1");
part1=part1.replaceAll("0*(\\d{3})","$1");

//取出字符
Matcher m2=p2.matcher(line);
m2.find();
part2=m2.group();

//将两个字符串合(part1,part2)并line
line=part1+part2;

fos.write(line);
}
}catch(IOException e){
throw new IOException("文件流错误!");
}finally{
fis.close();
bufIn.close();
fos.close();
}

}
public static void main(String[] args) throws Exception 
{
AddComma();

}
}

a.txt内容:
61.54.231.245 61.54.231.245 河南省安阳市 新世纪网吧
61.54.231.246 61.54.231.246 河南省安阳市 未知地区
61.54.231.247 61.54.231.247 河南省安阳市 红日网吧
61.54.231.248 61.54.231.248 河南省安阳市 安阳师范学院

运行程序后,b.txt的内容:
061.054.231.245,061.054.231.245,河南省安阳市 新世纪网吧061.054.231.246,061.054.231.246,河南省安阳市 未知地区061.054.231.247,061.054.231.247,河南省安阳市 红日网吧061.054.231.248,061.054.231.248,河南省安阳市 安阳师范学院

我想要的结果是:
061.054.231.245,061.054.231.245,河南省安阳市 新世纪网吧
061.054.231.246,061.054.231.246,河南省安阳市 未知地区
061.054.231.247,061.054.231.247,河南省安阳市 红日网吧
061.054.231.248,061.054.231.248,河南省安阳市 安阳师范学院

求大神指导??(不好意思,我只有3分了,没办法给分了)

------解决方案--------------------
windows: fos.write(line + "\r\n");
linux: fos.write(line + "\n");
最好用
fos.write(line + System.getProperty("line.separator") );



------解决方案--------------------
我是 \r\n 这么写的, 你也这么写 保证可以,结贴 给分!!
我的个人技术博客 http://www.happyalaric.com