- 浏览: 99212 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yanbin0830:
繁体在liunx下,压缩解压完之后还是会出现乱码。可以试试
windows下文件名正常,但linux下用ZipOutputStream压缩后中文文件名乱码 -
oujunfeng:
介绍得很详细,赞一个要是格式上再好看点读着就没那么累了
海量数据处理汇总 -
tf03172003:
根本没有解答问题
一个线程进入一个对象的一个synchronized方法,其他线程是否还可以进入该对象的其他方法 -
jiage17:
我在东软某部门笔试真碰到了楼主说的这道题
一笔试小题---文件读写操作(希望对刚毕业找工作的朋友有所帮助) -
gordianyuan:
<pre name="code" c ...
一笔试小题---文件读写操作(希望对刚毕业找工作的朋友有所帮助)
题目:文件intel.txt,内容如下:
小王【空格】10000【回车】
小强【空格】12345【回车】
小张【空格】2342 【回车】
小强【空格】1030 【回车】
小周【空格】1020 【回车】
请编写一程序从test.txt中读取数据,并按数字大小排序后写入另一文件sun.txt(写入格式同上)
下面是自己编写的程序代码,小弟刚毕业所学有限所幸要求功能是实现了,然必定有不规范不合理之处还望大家多多指教修正!!(希望大家提供些更合理的排序)
------------------------------------------------------------------
import com.j2se.file.MyIntComparator;//自定义比较器
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.TreeMap;
/***
*读文件test.txt内容(文件内容格式: 小王【空格】10000【回车】
* 小强【空格】12345【回车】
*并对该文件内容按存款数排序,然后将其写入另一文件内
*
*****/
public class fileSort {
/*****
* 以行为单位读写文件
*@param fileName 源文件
*@param toFileName 目标文件
* ****/
public static void read_writeFile(String fileName,String toFileName){
File file = new File(fileName);
BufferedReader reader=null;
TreeMap<Integer,String> map = new TreeMap<Integer,String>(new MyIntComparator());
File toFile = new File(toFileName);
PrintWriter writer = null;
try{
System.out.println("------------------读文件开始-------------------------------");
System.out.println();
System.out.println("以行为单位读取文件内容,每次读取一整行");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
String[] ss = null;
int line = 1;
//一次读一行,直到读取为null
while((tempString = reader.readLine()) != null){
//显示行号
System.out.println("line number is "+line+"::"+tempString);
line++;
ss = tempString.split(" ");
int i = 0;
String value = ss[i];
int key =Integer.parseInt(ss[i+1]);
System.out.println("key is:"+key);
System.out.println("value is:"+value);
map.put(key, value);
}
System.out.println("------------------读文件结束-------------------------------");
System.out.println();
System.out.println("------------------写文件开始-------------------------------");
System.out.println("写文件开始:"+file.getAbsolutePath());
writer = new PrintWriter(new FileOutputStream(toFile));
if(map !=null){
Object key = null;
Object value = null;
// 使用迭代器遍历Map的键,根据键取值
Iterator it = map.keySet().iterator();
while (it.hasNext()){
key = it.next();
value = map.get(key);
System.out.println("key is :"+key);
System.out.println("vlaue is :"+value);
//能写各种基本类型数据
writer.print(value+" ");
writer.print(key+" ");
//换行
writer.println();
//写入文件
writer.flush();
}
System.out.println("写文件"+file.getAbsolutePath()+"成功!");
System.out.println("---------------------------写文件结束--------------------------");
}
}catch(IOException e){
e.printStackTrace();
}finally{
if(reader != null){
try{
reader.close();
}catch(IOException e1){
e1.printStackTrace();
}
}
if(writer !=null){
writer.close();
}
}
}
public static void main(String[] args){
String fileName = "D:/test.txt";
String toFileName = "D:/test1.txt";
fileSort.read_writeFile(fileName, toFileName);
}
}
----------------自定义比较器--------------------------------------
import java.util.Comparator;
/**
* 整数比较器,将整数按降序排列
*/
class MyIntComparator implements Comparator{
/**
* o1比o2大,返回-1;o1比o2小,返回1。
*/
public int compare(Object o1, Object o2) {
int i1 = ((Integer)o1).intValue();
int i2 = ((Integer)o2).intValue();
if (i1 < i2){
return 1;
}
if (i1 > i2){
return -1;
}
return 0;
}
}
上面是我的想法,可以解决TreeMap的key冲突问题
getInteger(temp);方法中我用的正则匹配。
恩,我不敢说 用String的split没有用StringTokenizer好,但是值得肯定的是他们都能实现不假。
我在百度摆了下,看了几篇相关文章感觉看后只是看到它们的些许不同,还是不能区别出来哪个好与坏。
还望牛牛们详细讲解下吧
呵呵 你看下所有回复贴吧,有两位写的很好很值得收藏,其中一位仁兄给了面向对象思想的程序段。
你说的要是就本题而言是对的,但是如果被读取文件包含数字重复字段就不适用了,我当时也是没注意到,
看来一些问题还是需要摆出来献丑的,经过高人的修正确实能学到许多
大哥,你这个方法不就是前面那个嘛,hashmap不能解决重复key值的问题
jdk1.5下面的一个sort
呵呵 熟悉下api
小王【空格】10000【回车】
小强【空格】12345【回车】
小张【空格】2342 【回车】
小强【空格】1030 【回车】
小周【空格】1020 【回车】
请编写一程序从test.txt中读取数据,并按数字大小排序后写入另一文件sun.txt(写入格式同上)
下面是自己编写的程序代码,小弟刚毕业所学有限所幸要求功能是实现了,然必定有不规范不合理之处还望大家多多指教修正!!(希望大家提供些更合理的排序)
------------------------------------------------------------------
import com.j2se.file.MyIntComparator;//自定义比较器
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.TreeMap;
/***
*读文件test.txt内容(文件内容格式: 小王【空格】10000【回车】
* 小强【空格】12345【回车】
*并对该文件内容按存款数排序,然后将其写入另一文件内
*
*****/
public class fileSort {
/*****
* 以行为单位读写文件
*@param fileName 源文件
*@param toFileName 目标文件
* ****/
public static void read_writeFile(String fileName,String toFileName){
File file = new File(fileName);
BufferedReader reader=null;
TreeMap<Integer,String> map = new TreeMap<Integer,String>(new MyIntComparator());
File toFile = new File(toFileName);
PrintWriter writer = null;
try{
System.out.println("------------------读文件开始-------------------------------");
System.out.println();
System.out.println("以行为单位读取文件内容,每次读取一整行");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
String[] ss = null;
int line = 1;
//一次读一行,直到读取为null
while((tempString = reader.readLine()) != null){
//显示行号
System.out.println("line number is "+line+"::"+tempString);
line++;
ss = tempString.split(" ");
int i = 0;
String value = ss[i];
int key =Integer.parseInt(ss[i+1]);
System.out.println("key is:"+key);
System.out.println("value is:"+value);
map.put(key, value);
}
System.out.println("------------------读文件结束-------------------------------");
System.out.println();
System.out.println("------------------写文件开始-------------------------------");
System.out.println("写文件开始:"+file.getAbsolutePath());
writer = new PrintWriter(new FileOutputStream(toFile));
if(map !=null){
Object key = null;
Object value = null;
// 使用迭代器遍历Map的键,根据键取值
Iterator it = map.keySet().iterator();
while (it.hasNext()){
key = it.next();
value = map.get(key);
System.out.println("key is :"+key);
System.out.println("vlaue is :"+value);
//能写各种基本类型数据
writer.print(value+" ");
writer.print(key+" ");
//换行
writer.println();
//写入文件
writer.flush();
}
System.out.println("写文件"+file.getAbsolutePath()+"成功!");
System.out.println("---------------------------写文件结束--------------------------");
}
}catch(IOException e){
e.printStackTrace();
}finally{
if(reader != null){
try{
reader.close();
}catch(IOException e1){
e1.printStackTrace();
}
}
if(writer !=null){
writer.close();
}
}
}
public static void main(String[] args){
String fileName = "D:/test.txt";
String toFileName = "D:/test1.txt";
fileSort.read_writeFile(fileName, toFileName);
}
}
----------------自定义比较器--------------------------------------
import java.util.Comparator;
/**
* 整数比较器,将整数按降序排列
*/
class MyIntComparator implements Comparator{
/**
* o1比o2大,返回-1;o1比o2小,返回1。
*/
public int compare(Object o1, Object o2) {
int i1 = ((Integer)o1).intValue();
int i2 = ((Integer)o2).intValue();
if (i1 < i2){
return 1;
}
if (i1 > i2){
return -1;
}
return 0;
}
}
评论
72 楼
jiage17
2009-08-14
我在东软某部门笔试真碰到了楼主说的这道题
71 楼
gordianyuan
2009-08-13
public class App { public static void main(String[] args) { try { sort("src/main/resources/intel.txt", "target/sun.txt"); } catch (IOException e) { e.printStackTrace(); } } private static void sort(String source, String target) throws IOException { Scanner scanner = new Scanner(new File(source)); List<App.Item> items = new ArrayList<App.Item>(); while (scanner.hasNextLine()) { String[] tokens = scanner.nextLine().split(" "); items.add(new App.Item(tokens[0], Integer.parseInt(tokens[1]))); } scanner.close(); Collections.sort(items, new Comparator<App.Item>() { @Override public int compare(Item o1, Item o2) { return o1.getNumber().compareTo(o2.getNumber()); } }); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter( target))); for (App.Item item : items) { writer.println(item.getName() + " " + item.getNumber()); } writer.close(); } static class Item { private String name; private Integer number; public Item(String name, Integer number) { this.name = name; this.number = number; } public String getName() { return name; } public Integer getNumber() { return number; } } }
70 楼
HelloJimmy
2009-08-13
Map<Integer, String> map = new TreeMap<Integer, String>(); while((temp = bfReader.readLine()) != null) { Integer t = getInteger(temp); if(map.containsKey(t)) { String value= map.get(t); temp += "\r\n" + value; } map.put(t, temp) ; }
上面是我的想法,可以解决TreeMap的key冲突问题
getInteger(temp);方法中我用的正则匹配。
69 楼
zhangyou1010
2009-08-13
把每行封装成一个对象,实现Comparable接口。
68 楼
fangwei
2009-08-12
<p>也来练练手</p>
<pre name="code" class="java">import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
try {
//读取
List<Person> persons = new ArrayList<Person>();
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("e:/test/intel.txt"),"GBK"));
String line = null;
while ((line = in.readLine()) != null) {
String[] temp = line.split(" ");
persons.add(new Person(Integer.valueOf(temp[1]),temp[0]));
}
in.close();
//排序
Collections.sort(persons, new Comparator<Person>(){
public int compare(Person o1, Person o2) {
return o1.getId().compareTo(o2.getId());
}
});
//写入
BufferedWriter out = new BufferedWriter(new FileWriter("e:/test/sun.txt"));
for (Person person : persons) {
String s = person.getName() + " " + person.getId();
System.out.println(s);
out.write(s+"\r\n");
}
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Person {
Integer id;
String name;
public Person(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
</pre>
<p> </p>
<pre name="code" class="java">import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
try {
//读取
List<Person> persons = new ArrayList<Person>();
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("e:/test/intel.txt"),"GBK"));
String line = null;
while ((line = in.readLine()) != null) {
String[] temp = line.split(" ");
persons.add(new Person(Integer.valueOf(temp[1]),temp[0]));
}
in.close();
//排序
Collections.sort(persons, new Comparator<Person>(){
public int compare(Person o1, Person o2) {
return o1.getId().compareTo(o2.getId());
}
});
//写入
BufferedWriter out = new BufferedWriter(new FileWriter("e:/test/sun.txt"));
for (Person person : persons) {
String s = person.getName() + " " + person.getId();
System.out.println(s);
out.write(s+"\r\n");
}
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Person {
Integer id;
String name;
public Person(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
</pre>
<p> </p>
67 楼
cloverprince
2009-01-20
sort -nk 2
66 楼
zozoh
2009-01-20
建立一个对象
public class Person{
String name;
int number;
Person(String line){
String[] ss = line.split(" ");
name = ss[0];
number = Integer.parseInt(ss[1]);
}
}
能让你的程序简单一些
public class Person{
String name;
int number;
Person(String line){
String[] ss = line.split(" ");
name = ss[0];
number = Integer.parseInt(ss[1]);
}
}
能让你的程序简单一些
65 楼
jiagyao
2009-01-15
nba520pz 写道
用String的split
没有用StringTokenizer好!
没有用StringTokenizer好!
恩,我不敢说 用String的split没有用StringTokenizer好,但是值得肯定的是他们都能实现不假。
我在百度摆了下,看了几篇相关文章感觉看后只是看到它们的些许不同,还是不能区别出来哪个好与坏。
还望牛牛们详细讲解下吧
64 楼
jiagyao
2009-01-15
MicroClimber 写道
你的程序写的很精彩,然而我们换一种角度,我们会发现您想多了。既然sort()是按key排序的,我们就可以让那些数字变成key嘛!!!!!!!!
/*TreeMap<Integer, String> map = new TreeMap<Integer, String>(
new MyIntComparator());*/ 改成 TreeMap map = new TreeMap();
我的输出是:(我注视了两句输出)
------------------读文件开始-------------------------------
以行为单位读取文件内容,每次读取一整行
line number is 1::小李 4564
line number is 2::小王 3234
line number is 3::阿斯顿 23444
line number is 4::小张 2342
line number is 5::小强 1030
line number is 6::小周 1020
------------------读文件结束-------------------------------
------------------写文件开始-------------------------------
写文件开始:E:\Javapractice\2008-12-04-01\FirstJava\bin\FirstJava\test.txt
key is :1020
vlaue is :小周
key is :1030
vlaue is :小强
key is :2342
vlaue is :小张
key is :3234
vlaue is :小王
key is :4564
vlaue is :小李
key is :23444
vlaue is :阿斯顿
写文件E:\Javapractice\2008-12-04-01\FirstJava\bin\FirstJava\test.txt成功!
---------------------------写文件结束--------------------------
/*TreeMap<Integer, String> map = new TreeMap<Integer, String>(
new MyIntComparator());*/ 改成 TreeMap map = new TreeMap();
我的输出是:(我注视了两句输出)
------------------读文件开始-------------------------------
以行为单位读取文件内容,每次读取一整行
line number is 1::小李 4564
line number is 2::小王 3234
line number is 3::阿斯顿 23444
line number is 4::小张 2342
line number is 5::小强 1030
line number is 6::小周 1020
------------------读文件结束-------------------------------
------------------写文件开始-------------------------------
写文件开始:E:\Javapractice\2008-12-04-01\FirstJava\bin\FirstJava\test.txt
key is :1020
vlaue is :小周
key is :1030
vlaue is :小强
key is :2342
vlaue is :小张
key is :3234
vlaue is :小王
key is :4564
vlaue is :小李
key is :23444
vlaue is :阿斯顿
写文件E:\Javapractice\2008-12-04-01\FirstJava\bin\FirstJava\test.txt成功!
---------------------------写文件结束--------------------------
呵呵 你看下所有回复贴吧,有两位写的很好很值得收藏,其中一位仁兄给了面向对象思想的程序段。
你说的要是就本题而言是对的,但是如果被读取文件包含数字重复字段就不适用了,我当时也是没注意到,
看来一些问题还是需要摆出来献丑的,经过高人的修正确实能学到许多
63 楼
MicroClimber
2009-01-15
你的程序写的很精彩,然而我们换一种角度,我们会发现您想多了。既然sort()是按key排序的,我们就可以让那些数字变成key嘛!!!!!!!!
/*TreeMap<Integer, String> map = new TreeMap<Integer, String>(
new MyIntComparator());*/ 改成 TreeMap map = new TreeMap();
我的输出是:(我注视了两句输出)
------------------读文件开始-------------------------------
以行为单位读取文件内容,每次读取一整行
line number is 1::小李 4564
line number is 2::小王 3234
line number is 3::阿斯顿 23444
line number is 4::小张 2342
line number is 5::小强 1030
line number is 6::小周 1020
------------------读文件结束-------------------------------
------------------写文件开始-------------------------------
写文件开始:E:\Javapractice\2008-12-04-01\FirstJava\bin\FirstJava\test.txt
key is :1020
vlaue is :小周
key is :1030
vlaue is :小强
key is :2342
vlaue is :小张
key is :3234
vlaue is :小王
key is :4564
vlaue is :小李
key is :23444
vlaue is :阿斯顿
写文件E:\Javapractice\2008-12-04-01\FirstJava\bin\FirstJava\test.txt成功!
---------------------------写文件结束--------------------------
/*TreeMap<Integer, String> map = new TreeMap<Integer, String>(
new MyIntComparator());*/ 改成 TreeMap map = new TreeMap();
我的输出是:(我注视了两句输出)
------------------读文件开始-------------------------------
以行为单位读取文件内容,每次读取一整行
line number is 1::小李 4564
line number is 2::小王 3234
line number is 3::阿斯顿 23444
line number is 4::小张 2342
line number is 5::小强 1030
line number is 6::小周 1020
------------------读文件结束-------------------------------
------------------写文件开始-------------------------------
写文件开始:E:\Javapractice\2008-12-04-01\FirstJava\bin\FirstJava\test.txt
key is :1020
vlaue is :小周
key is :1030
vlaue is :小强
key is :2342
vlaue is :小张
key is :3234
vlaue is :小王
key is :4564
vlaue is :小李
key is :23444
vlaue is :阿斯顿
写文件E:\Javapractice\2008-12-04-01\FirstJava\bin\FirstJava\test.txt成功!
---------------------------写文件结束--------------------------
62 楼
nba520pz
2009-01-14
用String的split
没有用StringTokenizer好!
没有用StringTokenizer好!
61 楼
tongyi121
2009-01-12
解决重复问题的groovy解法
def data = [] new File('d:/test.txt').eachLine{ def line = it.tokenize() data+=new Expando(key1:line[0],key2:line[1] as Integer) } def outFile = new File('d:/sun.txt') def printWriter = outFile.newPrintWriter() data.sort{it.key2}.each{ printWriter.println("${it.key1} ${it.key2}") } printWriter.flush() printWriter.close()
60 楼
E生迅徒
2009-01-12
boboism 写道
哎…… 这种还是保留在C语言的思想上。JavaSE 这么多的类库都不会用,用个arraylist包着hashmap不就得了。再匿名一个compararor接口不就得了。干嘛这么麻烦
大哥,你这个方法不就是前面那个嘛,hashmap不能解决重复key值的问题
59 楼
buddha17
2009-01-12
import java.io.*;
import java.util.*;
public class TestSort{
public static void main(String[] args){
String s="";
try{
FileReader file=new FileReader("test1.txt");
BufferedReader buff=new BufferedReader(file);
boolean eof=false;
while (!eof){
String line= buff.readLine();
if (line==null) eof =true;else {
s+=line;
System.out.println(line);
}
}
buff.close();
}catch (IOException e){e.printStackTrace();}
//s..split(" ");
System.out.println("ss=" + s );
StringTokenizer stoken = new StringTokenizer(s, " ");
String ss[]= new String[stoken.countTokens()];
int i=0;
// logger.info("**a.getArtkey()*******--nav pager-"+a.getArtkey());
while (stoken.hasMoreTokens()){
ss[i++]=stoken.nextToken();
}
String[] people=new String[ss.length/2];
int[] value=new int[ss.length/2];
int[] value2=new int[ss.length/2];
for( i=0;i<ss.length/2;i++){
System.out.println("i="+i+"pep= "+ ss[i*2]);
System.out.println("i="+i+"value = "+ ss[i*2+1]);
people[i]=ss[i*2];
value[i]=Integer.parseInt(ss[2*i+1]);
value2[i]=value[i];
}
Arrays.sort(value2);
try{
//FileWriter f=new FileWriter("test2.txt");
// BufferedWriter buff =new BufferedWriter(f);
FileOutputStream f=new FileOutputStream("test2.txt");
DataOutputStream buff=new DataOutputStream(f);
for( i=0;i<ss.length/2;i++){
int j=0;
while (value2[i]!=value[j]) j++;
System.out.println( "pep= "+ people[j]);
System.out.println( "value = "+ value2[i]);
buff. writeUTF( people[j] );
buff.writeUTF( String.valueOf(value2[i]));
}
buff.close();
}catch (IOException e){e.printStackTrace();
}}
}
上机调试通过.
import java.util.*;
public class TestSort{
public static void main(String[] args){
String s="";
try{
FileReader file=new FileReader("test1.txt");
BufferedReader buff=new BufferedReader(file);
boolean eof=false;
while (!eof){
String line= buff.readLine();
if (line==null) eof =true;else {
s+=line;
System.out.println(line);
}
}
buff.close();
}catch (IOException e){e.printStackTrace();}
//s..split(" ");
System.out.println("ss=" + s );
StringTokenizer stoken = new StringTokenizer(s, " ");
String ss[]= new String[stoken.countTokens()];
int i=0;
// logger.info("**a.getArtkey()*******--nav pager-"+a.getArtkey());
while (stoken.hasMoreTokens()){
ss[i++]=stoken.nextToken();
}
String[] people=new String[ss.length/2];
int[] value=new int[ss.length/2];
int[] value2=new int[ss.length/2];
for( i=0;i<ss.length/2;i++){
System.out.println("i="+i+"pep= "+ ss[i*2]);
System.out.println("i="+i+"value = "+ ss[i*2+1]);
people[i]=ss[i*2];
value[i]=Integer.parseInt(ss[2*i+1]);
value2[i]=value[i];
}
Arrays.sort(value2);
try{
//FileWriter f=new FileWriter("test2.txt");
// BufferedWriter buff =new BufferedWriter(f);
FileOutputStream f=new FileOutputStream("test2.txt");
DataOutputStream buff=new DataOutputStream(f);
for( i=0;i<ss.length/2;i++){
int j=0;
while (value2[i]!=value[j]) j++;
System.out.println( "pep= "+ people[j]);
System.out.println( "value = "+ value2[i]);
buff. writeUTF( people[j] );
buff.writeUTF( String.valueOf(value2[i]));
}
buff.close();
}catch (IOException e){e.printStackTrace();
}}
}
上机调试通过.
58 楼
zjq0717
2009-01-12
groovy的解法看着很爽啊
57 楼
xingqiliudehuanghun
2009-01-12
也写了一个,感觉读这种格式不严格数据应该用正则。第一次写这种程序,写web程序对文件读写部署,大家多指教
package com.saturday; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ReadTxt { public static void main(String args[]){ try{ List lsRecords=readData("D:/Data.txt"); sortRecord(lsRecords,"asc"); writeData(lsRecords); }catch(FileNotFoundException ex){ System.out.println("无法读取数据文件!"); }catch(Exception ex){ System.out.println(ex.getMessage()); } } public static List readData(String sFilePath) throws Exception{ BufferedReader bufreader=null; List lsRecords=new ArrayList(); try{ StringBuffer sbData=new StringBuffer(); String sLineData=null; bufreader=new BufferedReader(new FileReader(sFilePath)); Pattern p=Pattern.compile( "^\\s*(.*?)\\s+(\\d+)\\s*$", Pattern.MULTILINE); while((sLineData=bufreader.readLine())!=null){ sbData.append(sLineData+"\n"); } Matcher m=p.matcher(sbData); while(m.find()){ lsRecords.add(m.group(1)+":"+m.group(2)); } }catch(Exception ex){ throw ex; }finally{ try{ if(bufreader!=null) bufreader.close(); }catch(Exception ex){} } return lsRecords; } public static void sortRecord(List lsRecords,String sSortSty){ Comparator AscCmp=new Comparator(){ public int compare(Object o1,Object o2){ String str1=(String)o1; String str2=(String)o2; int int1=Integer.parseInt( str1.substring(str1.indexOf(':')+1)); int int2=Integer.parseInt( str2.substring(str2.indexOf(':')+1)); return int1<int2?-1:1; } }; Comparator DesCmp=new Comparator(){ public int compare(Object o1,Object o2){ String str1=(String)o1; String str2=(String)o2; int int1=Integer.parseInt( str1.substring(str1.indexOf(':')+1)); int int2=Integer.parseInt( str2.substring(str2.indexOf(':')+1)); return int1<int2?1:-1; } }; if(sSortSty.equals("des")) Collections.sort(lsRecords,DesCmp); else Collections.sort(lsRecords,AscCmp); } public static void writeData(List lsRecords) throws Exception{ BufferedWriter bufwriter=null; try{ bufwriter=new BufferedWriter(new FileWriter("D:/SortedData.txt")); String sLineData=null; Iterator i=lsRecords.iterator(); while(i.hasNext()){ sLineData=(String)i.next(); sLineData=sLineData.replaceAll(":", " ")+"\n"; bufwriter.write(sLineData); } }catch(Exception ex){ throw ex; }finally{ try{ if(bufwriter!=null) bufwriter.close(); }catch(Exception ex){} } } }
56 楼
jiagyao
2009-01-12
呵呵,几天没上来,又多了十几条评论,谢谢大家的参与了,
感觉看帖子确实能学到不少东西,提高了~
感觉看帖子确实能学到不少东西,提高了~
55 楼
jltest
2009-01-10
没颜色看着头痛。。
import com.j2se.file.MyIntComparator;//自定义比较器 import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.TreeMap; /*** *读文件test.txt内容(文件内容格式: 小王【空格】10000【回车】 * 小强【空格】12345【回车】 *并对该文件内容按存款数排序,然后将其写入另一文件内 * *****/ public class fileSort { /***** * 以行为单位读写文件 *@param fileName 源文件 *@param toFileName 目标文件 * ****/ public static void read_writeFile(String fileName,String toFileName){ File file = new File(fileName); BufferedReader reader=null; TreeMap<Integer,String> map = new TreeMap<Integer,String>(new MyIntComparator()); File toFile = new File(toFileName); PrintWriter writer = null; try{ System.out.println("------------------读文件开始-------------------------------"); System.out.println(); System.out.println("以行为单位读取文件内容,每次读取一整行"); reader = new BufferedReader(new FileReader(file)); String tempString = null; String[] ss = null; int line = 1; //一次读一行,直到读取为null while((tempString = reader.readLine()) != null){ //显示行号 System.out.println("line number is "+line+"::"+tempString); line++; ss = tempString.split(" "); int i = 0; String value = ss[i]; int key =Integer.parseInt(ss[i+1]); System.out.println("key is:"+key); System.out.println("value is:"+value); map.put(key, value); } System.out.println("------------------读文件结束-------------------------------"); System.out.println(); System.out.println("------------------写文件开始-------------------------------"); System.out.println("写文件开始:"+file.getAbsolutePath()); writer = new PrintWriter(new FileOutputStream(toFile)); if(map !=null){ Object key = null; Object value = null; // 使用迭代器遍历Map的键,根据键取值 Iterator it = map.keySet().iterator(); while (it.hasNext()){ key = it.next(); value = map.get(key); System.out.println("key is :"+key); System.out.println("vlaue is :"+value); //能写各种基本类型数据 writer.print(value+" "); writer.print(key+" "); //换行 writer.println(); //写入文件 writer.flush(); } System.out.println("写文件"+file.getAbsolutePath()+"成功!"); System.out.println("---------------------------写文件结束--------------------------"); } }catch(IOException e){ e.printStackTrace(); }finally{ if(reader != null){ try{ reader.close(); }catch(IOException e1){ e1.printStackTrace(); } } if(writer !=null){ writer.close(); } } } public static void main(String[] args){ String fileName = "D:/test.txt"; String toFileName = "D:/test1.txt"; fileSort.read_writeFile(fileName, toFileName); } } ----------------自定义比较器-------------------------------------- import java.util.Comparator; /** * 整数比较器,将整数按降序排列 */ class MyIntComparator implements Comparator{ /** * o1比o2大,返回-1;o1比o2小,返回1。 */ public int compare(Object o1, Object o2) { int i1 = ((Integer)o1).intValue(); int i2 = ((Integer)o2).intValue(); if (i1 < i2){ return 1; } if (i1 > i2){ return -1; } return 0; } }
54 楼
mfree
2009-01-10
spyker 写道
public class TestSort { public static void main(String[] args) { List<Integer> intList = new ArrayList<Integer>(); intList.add(123); intList.add(122223); intList.add(1233); intList.add(1234); intList.add(125); Integer[] intArr = intList.toArray(new Integer[intList.size()]); Arrays.sort(intArr); for (int i : intArr) { System.out.println(i); } } }
jdk1.5下面的一个sort
呵呵 熟悉下api
java.util.Collections.sort(intList);
53 楼
boboism
2009-01-10
哎…… 这种还是保留在C语言的思想上。JavaSE 这么多的类库都不会用,用个arraylist包着hashmap不就得了。再匿名一个compararor接口不就得了。干嘛这么麻烦
相关推荐
【标题解析】 "华为笔试题目--程序设计类C/C++"这个标题表明这是一组与华为公司招聘笔试相关的程序设计题目,主要针对C和...同时,了解软件工程的基本原理,如版本控制(Git)、代码审查、测试等,也会对面试有所帮助。
本文将围绕“JAVA编程题”这一主题,深入探讨在笔试中可能出现的相关知识点,帮助备考者做好充分准备。 首先,人民币金额数字转换成大写的函数是一个常见的编程挑战。在金融领域,确保数据的准确性和规范性至关重要...
### IT知识点汇总 #### 数据分析与编程基础 1. **数据之间的关系和特征**: - 数据之间的关系指的是数据集内部各个变量之间的关联性。这种关联性可以通过统计方法(如相关系数)或可视化手段...希望对你有所帮助。
虽不直接影响得分,但性格测试的结果会影响面试官对求职者是否适合银行工作的判断。这部分试题通常采用多选题形式,通过求职者对不同情境下的反应来评估其团队协作能力、沟通能力、应变能力和稳定性等。 复习这些...
【描述】:“北京华辰泽众信息科技有限公司Java笔试题”描述简洁,表明这是一个针对求职者进行的技术能力测试,主要考察求职者对Java技术的掌握程度和实际应用能力。此类笔试通常包含各种难度层次的问题,旨在全面...
【360 Java 研发笔试题】是针对应聘360公司Java研发岗位的求职者设计的一系列测试题目,旨在评估候选人在Java编程语言、软件工程、数据结构、算法以及系统设计等方面的能力。这类笔试题通常涵盖广泛的知识点,以确保...
本资料包"IT行业面试笔试题目与JAVA面试题.rar"显然是一份综合性的资源,包含了C++、C、Java等编程语言的面试和笔试题目,特别聚焦于JAVA面试题,旨在帮助求职者准备各大公司的招聘过程。 1. **JAVA基础** - 类与...
以下是一些关键的Java知识点,这些内容通常会在面试题中出现,并对寻找工作的求职者有所帮助。 1. **Java基础** - 类与对象:理解面向对象编程的基本概念,包括类的定义、对象的创建和访问修饰符。 - 继承、封装...
以上知识点在“C#笔试题.docx”和“C#上机试题.docx”中可能会有所涉及,建议应聘者们深入理解和掌握,以便在面试和笔试中表现出色。同时,持续学习和实践C#新特性和.NET生态系统的发展,对于提升个人技能和职业发展...
### HiAll名企英文面试、笔试、网申真题百题串讲 #### 知识点概述 本文件提供了一套全面的英文求职培训指南,旨在帮助学生和职场新人掌握有效的求职技能,尤其是在英语环境中。培训内容覆盖了网申、填表、开放式...
根据提供的文件信息,我们可以梳理出一系列与Java编程相关的知识点,这些知识点主要涵盖了Java语言的基础、面向...以上是对文件中提到的一些知识点的详细解释,希望对准备参加宅急送研发中心Java笔试的求职者有所帮助。
这份"java面试笔试大全"集合了大量Java面试题,旨在帮助求职者全面准备面试,涵盖基础到高级的各种知识点。以下将根据提供的信息,详细阐述Java面试中可能涉及的一些核心知识点。 1. **Java基础** - 类与对象:...
本次提供的资料为一份包含了110道Python面试题及答案的PDF文档,涉及到的知识点包括Python语言基础、数据类型、函数使用、类与对象、异常处理、模块和包的使用、数据结构、文件操作、Linux命令、正则表达式、图形...
《中国建设银行2013年校园招聘完整试题真题及答案解析》是针对有志于进入银行业,尤其是中国建设银行的求职者们的一份重要参考资料。这份文档详细记录了2013年中国建设银行在校园招聘过程中所使用的试题,包括了笔试...
Java笔试宝典是一份全面的资源,旨在帮助Java开发者准备各类技术面试和笔试。这份宝典包含了大量的题目,涵盖了Java编程语言的各个方面,包括但不限于基础语法、面向对象设计、数据结构与算法、集合框架、多线程、...
- **HR官方答疑**:通过在线形式进行的答疑,帮助求职者更好地了解招聘细节和准备策略。 #### 四、爱立信职业发展与薪酬待遇 - **薪酬体系**:提供具有竞争力的薪资待遇,具体细节根据职位和地区有所不同。 - **...
### 华为2013校园招聘求职宝典 #### 第一篇:企业背景 ##### 1.1 企业概况 **1.1.1 企业名片** - **公司全称**:华为技术有限公司 ...希望本宝典能够帮助大家更好地准备华为的校园招聘,成功迈出职业生涯的第一步。
本文对 Java 面试题进行了回顾,涵盖了 Java 语言基础、Web 开发、数据库、缓存、JavaScript 和 Linux 等多方面的内容,旨在帮助读者备战 Java 面试。 Java 语言基础 1. Java 中的 try-catch-finally 语句执行顺序...
宝钢英语等级考试是一种针对宝钢员工或相关人员设置的英语水平测试,主要测试应试者的英语听说读写译等综合语言能力。该考试分为不同的级别,其中提到的是英语一级笔试,它包含五个部分:听力理解、阅读理解、翻译、...
### 主函数与文件读写操作 主函数`main`中,首先通过`scanf`函数接收用户输入的两个整数m和n,然后调用`num`函数获取结果,并输出。此外,还提供了一个`readwriteDat`函数用于从文件中读取测试数据并调用`num`函数...