读书人

[100分]JAVA读取、处理txt文件并把结果

发布时间: 2012-12-20 09:53:21 作者: rapoo

[100分求助]JAVA读取、处理txt文件并把结果写入新txt
本帖最后由 fanalin000 于 2012-07-23 10:36:17 编辑 要用Java写个东西读取txt中的数据,若id1或者id2的值不同,就插入END,START(详细见结果),最后只输出修改后的id3列。我对java不熟,读入txt和写出新txt还是能自己弄的,但是不会比较id1的值或者id2的值,请大家帮忙,最好带注释,谢谢
源文件:
id1 id2 id3
100037 1 Q
100037 1 SR
100037 1 Q
100037 1 SR
100039 1 Q
100039 1 SR
100044 1 Q
100044 1 SR
100048 1 Q
100048 1 Q
100048 1 SR
100048 2 Q
100048 2 Q
100048 2 SR
100078 1 Q
100078 1 SH
100078 1 SR
100078 1 Q

希望得到的结果:

START
Q
SR
Q
SR
END
START
Q
SR
END
START
Q
SR
END
START
Q
Q
SR
END
START
Q
Q
SR
END
START
Q
SH
SR
Q
END



[最优解释]


package com.li;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.TreeSet;

public class Main {

public static void main(String[] args) throws IOException {
BufferedReader buf = new BufferedReader(new InputStreamReader(new FileInputStream(new File("e:/1.txt"))));
String temp = "";
Set<Text> texts = new TreeSet<Text>();
while((temp=buf.readLine())!=null){
Text text= new Text(temp);
texts.add(text);
}
for (Text text : texts) {
System.out.println("START\n"+text.getContent()+"\nEND");
}

}
}
class Text implements Comparable<Text>{

private String content =null;
private String header = null;

public Text(String content){
setContent(content);
this.header = content.split(" ")[0];
this.content = content.split(" ")[2];
}

@Override
public int compareTo(Text o) {
if(header.equals(o.getHeader())){
o.setContent(o.getContent()+"\n"+content);
return 0;
}else return 1;
}


public String getContent() {
return content;
}

public void setContent(String content) {
this.content = content;
}

public String getHeader() {
return header;
}

public void setHeader(String header) {
this.header = header;
}

}

[其他解释]
    public static void main(String[] args) throws Exception {
FileReader fr = new FileReader("d:\\from.txt");
BufferedReader br = new BufferedReader(fr);
StringBuffer buf = new StringBuffer();



FileWriter fw = new FileWriter("d:\\to.txt");
BufferedWriter bw = new BufferedWriter(fw);

String line = null;
br.readLine();

String id1temp = "";
String id2temp = "";
if((line = br.readLine()) != null){
buf.append("START");
buf.append("\r\n");
buf.append(line.split(" ")[2]);
buf.append("\r\n");
id1temp = line.split(" ")[0];
id2temp = line.split(" ")[1];
}

while((line = br.readLine()) != null){
String[] ids = line.split(" ");
String id1 = ids[0];
String id2 = ids[1];
String id3 = ids[2];

if(!id1temp.equals(id1)
[其他解释]
你既然可以对txt进行读取,那么你可以把这些数据一行一行的装进一个List里面,同时你又可以把每行的数据解析成一个数组,你这里可以根据空格进行分割就是一个数组了,这样的话,你只要循环这个数组,判断数组的第一个位置的值和第2个位置的值就可以
[其他解释]
line.split(" ") 是一个数组
line.split(" ")[0] 是取这个数组的第一个元素。

文件第一行是 id1 id2 id3
从第二行开始才是数据
100037 1 Q
100037 1 SR
.........
.........

所以从第二行开始计算

[其他解释]
自己顶,求指导
[其他解释]
该回复于2012-07-23 10:39:53被版主删除
[其他解释]
楼上的兄弟,很清楚。不行,再GOOGLE一下啦
[其他解释]

引用:
你既然可以对txt进行读取,那么你可以把这些数据一行一行的装进一个List里面,同时你又可以把每行的数据解析成一个数组,你这里可以根据空格进行分割就是一个数组了,这样的话,你只要循环这个数组,判断数组的第一个位置的值和第2个位置的值就可以

初学Java,还不了解List的用法,搜代码的时候曾经看过有用Map的,这两个一样吗?
[其他解释]

引用:
Java code

package com.li;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Set;
im……

谢谢,参考代码学习一下。
------其他解决方案--------------------


!id2temp.equals(id2)){
buf.append("END");
buf.append("\r\n");
buf.append("START");
buf.append("\r\n");

id1temp = id1;
id2temp = id2;
}
buf.append(id3);
buf.append("\r\n");
}

buf.append("END");
bw.write(buf.toString());
bw.close();
br.close();
}


逻辑挺清楚的,楼主应该能看懂。
[其他解释]
引用:
Java code
buf.append(line.split(" ")[2]);
buf.append("\r\n");
id1temp = line.split(" ")[0];
id2temp = line.split(" ")[1];


id1temp = line.split(" ")[0];这个表示什么?

PS:代码是从第二行开始读数据的,我找了好半天也不知道应该在哪里改。。。
[其他解释]
这写都是基础了,你可以参考者API去看上面代码,主要 是java.lang包下String 这个类的方法
[其他解释]
引用:
这写都是基础了,你可以参考者API去看上面代码,主要 是java.lang包下String 这个类的方法

我明白split表示用后面的空格来切分数据,但是不清楚为什么表示第一列的[0]要写在后面,没找到对应的格式啊,你所说的lang包下也没有找到详细说明。

[其他解释]
Google下Tokenizer,写个切割字符串的方法把id1,id2切开来各存一个String,然后下面的存成list,ArrayList,数组啥都的行,取个SIZE或者LENGTH,按照那个做个循环匹配,匹配完,操作完再合上……要留啥就留啥……不要的就不合进去……
[其他解释]
为什么不用数据库呢?那样的话修改字段很简单的,对文件操作要修改字段的内容,有点复杂。。
[其他解释]
比较困难的一个问题。
[其他解释]
引用:
初学者,还不懂啊


慢慢来吧,先去理解 基础,然后参考别人代码
现看懂,然后多敲代码吧
[其他解释]
初学者,还不懂啊

读书人网 >Eclipse开发

热点推荐