现在在做毕设 遇到最后一个问题 希望可以得到帮助 我把文件中的字符串读出来,然后删除特定的字符串 然后保存 但是现在的问题是 读出来后字符串原来的格式都没有了 怎样读写才可以保留原有文件的格式呢?
下面是我的代码 希望高手指教了
File file = new File(fileP);
try {
FileReader fd2 = new FileReader(file.getPath());
BufferedReader br2 = new BufferedReader(fd2);
//System.out.println(br2);
try {
while((filetext2 = br2.readLine())!=null){
ft2 +=filetext2;
}
ft2 = ft2.replaceAll("\r\n","").replaceAll(" ","").replaceAll(fF,"");
br2.close();
} catch (IOException e1) {
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
FileWriter fw2 = new FileWriter(file.getPath());
BufferedWriter bw3 = new BufferedWriter(fw2);
if(ft2.contains("null")){
ft2.replaceAll("null","");
}
bw3.write(ft2);
bw3.flush();
bw3.close();
} catch (IOException e1) {
e1.printStackTrace();
}
下面是我的代码 希望高手指教了
File file = new File(fileP);
try {
FileReader fd2 = new FileReader(file.getPath());
BufferedReader br2 = new BufferedReader(fd2);
//System.out.println(br2);
try {
while((filetext2 = br2.readLine())!=null){
ft2 +=filetext2;
}
ft2 = ft2.replaceAll("\r\n","").replaceAll(" ","").replaceAll(fF,"");
br2.close();
} catch (IOException e1) {
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
FileWriter fw2 = new FileWriter(file.getPath());
BufferedWriter bw3 = new BufferedWriter(fw2);
if(ft2.contains("null")){
ft2.replaceAll("null","");
}
bw3.write(ft2);
bw3.flush();
bw3.close();
} catch (IOException e1) {
e1.printStackTrace();
}
解决方案 »
- 几个JAVA编程问题请教
- Java 3D 里面的mousebehavior怎么和鼠标的各个键绑定的?
- 帮忙看个错:java.lang.NoClassDefFoundError: javax/mail/Message
- 关于List的问题,一个List装了若干ObjectX,我想remove一个ObjectX.c=-1的对象,请问如何做?
- JDK在WINDOWS XP下安装好,如何使用
- 要完成附件下载的功能,大家提点建议
- jbx运行不了,jcreator可运行的文件!!!为什么
- 在java中怎样得到将要插入mysql的自动增加id
- 第一个Java程序HelloWorld居然错了。
- 侃侃、谈谈。
- 如何根据参数来new不同的类?
- netbeans里面的事件处理
看我的回答,应该有你要的
http://topic.csdn.net/u/20090524/14/7daeec93-ad67-49c9-b0bf-f48260be2a6b.html
null
n,ull
n ull
n u l l
n ll
n\r\null
等都在被去除之列?
恩 比如 我有个文件中的内容是:
aaabbb ccc
ddd
现在有个特定字符串 是 bbbccc 文件中如果包含了就要删掉 因为程序中的空格是不影响功能的 所以我要先去掉空格后匹配 包含字符串删掉后的文件内容我希望可以是:
aaaddd
可以实现这样的功能么?
aaabbb ccc
ddd
读出bbb ccc这一行的时候 去掉空格后匹配是否和bbbccc相同 要是相同则删除这一行???你要的不是这样的效果么?
aaabbb ccc
ddd运行后:
aaa
ddd是不是你要的效果?代码:
File file = new File("D:/a.txt");
String filetext2 = "";
String ft2 = "";
String fF = "bbbccc";
try {
FileReader fd2 = new FileReader(file.getPath());
BufferedReader br2 = new BufferedReader(fd2);
try {
while((filetext2 = br2.readLine())!=null){
filetext2 = filetext2.replace(" ", "").replace(fF, "");
ft2 = ft2 + filetext2 + "\r\n";
}
br2.close();
} catch (IOException e1) {
}
}
catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
FileWriter fw2 = new FileWriter(file.getPath());
BufferedWriter bw3 = new BufferedWriter(fw2);
if(ft2.contains("null")){
ft2.replaceAll("null","");
}
bw3.write(ft2);
bw3.flush();
bw3.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
File file = new File("D:/a.txt");
String filetext2 = "";
String ft2 = "";
String fF = "bbbccc";
try {
FileReader fd2 = new FileReader(file.getPath());
BufferedReader br2 = new BufferedReader(fd2);
try {
while((filetext2 = br2.readLine())!=null){
filetext2 = filetext2.replace(" ", "").replace(fF, "");
ft2 = ft2 + filetext2 + "\r\n";
}
br2.close();
} catch (IOException e1) {
}
}
catch (FileNotFoundException e1) {
e1.printStackTrace();
}
try {
FileWriter fw2 = new FileWriter(file.getPath());
BufferedWriter bw3 = new BufferedWriter(fw2);
if(ft2.contains("null")){
ft2.replaceAll("null","");
}
bw3.write(ft2);
bw3.flush();
bw3.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
当缓冲区空时,如果读取的字符是'n',也就是开头字符,则把它放到缓冲区中,同时把缓冲区中有效字符数(bufferPoint)加上1
在后来的读字符过程中,可能会遇到几种情况:
读进来的是可以用于忽略的字符,比如' ', '\r', '\n', ',',这时应该把它继续放到缓冲区
如果读进来的字符破坏了缓冲区的秩序,比如缓冲区中有字符串“n,,,,u,,”,而读入的字符是'a',则认为缓冲区秩序将被破坏,这时应该把缓冲空保存的字符串和最后读入的字符放到结果集的字符串中去。
如果读入的字符串能够保持缓冲区中的秩序,比如缓冲区中有字符串"n u,,,l",则把它追加到缓冲区中去。如果缓冲区中存放的字符串已经可以进行格式化,也就是在却除了可忽略的字符串后存在一个子串"null",则将缓冲区中的字符串格式化之后,追加到结果集,并清空缓冲区。下面是实现代码,但是测试的数据不是很多,估计还会有一些 bug
package stu.test;import java.io.*;public class TestCatchString{
// 将要被忽略的单词
private final String skipString = "null";
// 单词中间可以允许存在的字符
private final char[] ignoreCharactors = new char[]{
' ', ',', '\r', '\n'
};
private StringBuilder sbResult = new StringBuilder();
private StringBuilder sbBuffer = new StringBuilder();
// 用于指示缓冲区中有效字符集的个数,比如缓冲区中值为"n u l"、""n,,,,u\r\nl或"nu l"时,该值为3
private int bufferPoint = 0;
// 检查字符是否是要被忽略的字符
private boolean isIgnoreChar(char data){
for(char item : ignoreCharactors){
if(item == data)
return true;
}
return false;
}
// 判断是否应该将当前的字符放到缓冲区
private boolean shouldPushToBuffer(char data){
if(data == skipString.charAt(bufferPoint)){
bufferPoint++;
return true;
}
if(sbBuffer.length() > 0){
// 如果缓冲区中有数据,比如:n u
if(isIgnoreChar(data)){
// 如果当前读入的是一个可忽略的字符,如' ',因为此时缓冲区中有数据,因此将此字符放入缓冲区
return true;
}else{
// 如果当前读入的是不可忽略的字符,如 'a',此时应该把缓冲区中保存的字符全部放到sbResult中去
bufferPoint = 0;
return false;
}
}else{
return false;
}
}
private boolean bufferOK(){
return (bufferPoint == skipString.length());
}
private void clearBuffer(){
if(sbBuffer.length() > 0)
this.sbBuffer.delete(0, sbBuffer.length());
this.bufferPoint = 0;
}
private String formatBuffer(){
for(int i = 0; i<skipString.length(); i++){
int index = sbBuffer.indexOf(skipString.substring(i, i+1));
sbBuffer.replace(index, index + 1, "");
}
String result = sbBuffer.toString();
this.clearBuffer();
return result;
}
public void skipString(Reader reader){
int charData = -1;
while(true){
try{
charData = reader.read();
}catch(Exception ex){
ex.printStackTrace();
return;
}
// 已经到达流的末尾
if(charData == -1){
if(sbBuffer.length() > 0){
sbResult.append(sbBuffer.toString());
}
return;
}
char data = (char)charData;
if(shouldPushToBuffer(data)){
sbBuffer.append(data);
// 将字符放到缓冲区后,判断缓冲区中字符串是否合格
if(bufferOK()){
sbResult.append(formatBuffer());
}
}else{
// 此次读入的字符将破坏缓冲区中的秩序
sbResult.append(sbBuffer.toString());
sbResult.append(data);
this.clearBuffer();
}
}
}
public String getResult(){
String result = sbResult.toString();
sbResult.delete(0, result.length() - 1);
sbResult = null;
return result;
}
public TestCatchString(){
}
public static void main(String[] args){
// 准备被测试的字符串
StringBuilder sbSource = new StringBuilder();
sbSource.append("abc--null--\r\n"); // 被处理
sbSource.append("abc--nu\r\nll--\r\n"); // 被处理
sbSource.append("abc--n,,,,,,ull--\r\n"); // 被处理
sbSource.append("abc--n,,u,,l l--\r\n"); // 被处理
sbSource.append("abc--n-u,ll--\r\n"); // 不被处理
String source = sbSource.toString();
Reader reader = new StringReader(source);
TestCatchString obj = new TestCatchString();
obj.skipString(reader);
String result = obj.getResult();
System.out.println(source);
System.out.println("--------------------------------");
System.out.println(result);
}
}