- 浏览: 99259 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yanbin0830:
繁体在liunx下,压缩解压完之后还是会出现乱码。可以试试
windows下文件名正常,但linux下用ZipOutputStream压缩后中文文件名乱码 -
oujunfeng:
介绍得很详细,赞一个要是格式上再好看点读着就没那么累了
海量数据处理汇总 -
tf03172003:
根本没有解答问题
一个线程进入一个对象的一个synchronized方法,其他线程是否还可以进入该对象的其他方法 -
jiage17:
我在东软某部门笔试真碰到了楼主说的这道题
一笔试小题---文件读写操作(希望对刚毕业找工作的朋友有所帮助) -
gordianyuan:
public class App {
public s ...
一笔试小题---文件读写操作(希望对刚毕业找工作的朋友有所帮助)
题目:文件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;
}
}
恩,点到实质了,希望高手多发点解决这问题的方法。
jdk1.5下面的一个sort
呵呵 熟悉下api
明明有treeset 会自动的给你自然排序 干嘛用list啊
正解
哎,昨天没好好看agiha给的例子,晕倒,害我昨晚还自己写了一下,今天早上一看,竟然写重复了
PS:写windows shell 的兄弟就是快手的说
正解
后面两种方法能不能详细说明下
4. java.util.Arrays.*
java.util.Collections.sort(list);
5. if(o1 == null) return xxx;
if(o2 == null) // xxx;
就是如果参数是null,如果参与排序,是放头还是放尾,或者扔异常
正则表达式,还真不太了解 ,能把正则表达式贴出来吗
谢谢,指正编码规范是该看看了
小王【空格】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;
}
}
评论
52 楼
troyconder
2009-01-09
你这个帖子 怎么能发上来?
51 楼
zhaolie43
2009-01-09
还是觉得把Object放到ArrayList里面,用比较器拿出Objetc的属性来比较最舒服。
50 楼
xbmujfly
2009-01-08
<p>我也来发表个,呵呵</p>
<p> </p>
<pre name='code' class='java'>package cn.xbmu.lib.jfly.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
/**
* 文件intel.txt,内容如下:
* 小王【空格】10000【回车】
* 小强【空格】12345【回车】
* 小张【空格】2342 【回车】
* 小强【空格】1030 【回车】
* 小周【空格】1020 【回车】
* 小杨【空格】2342 【回车】
* 请编写一程序从test.txt中读取数据,并按数字大小排序后写入另一文件sun.txt(写入格式同上)
* @author JFly
*/
public class SortFileContentByNum {
public static void main(String[] args) throws FileNotFoundException, IOException {
BufferedReader br = new BufferedReader(new FileReader("C:/test.txt"));
String line = null;
int size = 0;
ArrayList<String> al = new ArrayList<String>();
while ((line = br.readLine()) != null) {
if (!line.isEmpty()) {
al.add(line);
size++;
}
}
br.close();
String[] b = al.toArray(new String[size]);
Arrays.sort(b, new Comparator<String>() {
public int compare(String s1, String s2) {
int i1 = 0;
int i2 = 0;
if (s1.matches(".+\\s+\\d+") && s2.matches(".+\\s+\\d+")) {
i1 = Integer.parseInt(s1.replaceAll("\\D", ""));
i2 = Integer.parseInt(s2.replaceAll("\\D", ""));
}
if(i1 == i2) {
String str1 = s1.replaceAll("\\d", "");
String str2 = s2.replaceAll("\\d", "");
return str1.compareTo(str2) > 0 ? -1 : 1;
}
return i1 < i2 ? -1 : 1;
}
});
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/result.txt"));
for(String s : b) {
bw.write(s);
bw.write("\r");
}
bw.flush();
bw.close();
}
}</pre>
<p> </p>
<p> </p>
<pre name='code' class='java'>package cn.xbmu.lib.jfly.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
/**
* 文件intel.txt,内容如下:
* 小王【空格】10000【回车】
* 小强【空格】12345【回车】
* 小张【空格】2342 【回车】
* 小强【空格】1030 【回车】
* 小周【空格】1020 【回车】
* 小杨【空格】2342 【回车】
* 请编写一程序从test.txt中读取数据,并按数字大小排序后写入另一文件sun.txt(写入格式同上)
* @author JFly
*/
public class SortFileContentByNum {
public static void main(String[] args) throws FileNotFoundException, IOException {
BufferedReader br = new BufferedReader(new FileReader("C:/test.txt"));
String line = null;
int size = 0;
ArrayList<String> al = new ArrayList<String>();
while ((line = br.readLine()) != null) {
if (!line.isEmpty()) {
al.add(line);
size++;
}
}
br.close();
String[] b = al.toArray(new String[size]);
Arrays.sort(b, new Comparator<String>() {
public int compare(String s1, String s2) {
int i1 = 0;
int i2 = 0;
if (s1.matches(".+\\s+\\d+") && s2.matches(".+\\s+\\d+")) {
i1 = Integer.parseInt(s1.replaceAll("\\D", ""));
i2 = Integer.parseInt(s2.replaceAll("\\D", ""));
}
if(i1 == i2) {
String str1 = s1.replaceAll("\\d", "");
String str2 = s2.replaceAll("\\d", "");
return str1.compareTo(str2) > 0 ? -1 : 1;
}
return i1 < i2 ? -1 : 1;
}
});
BufferedWriter bw = new BufferedWriter(new FileWriter("c:/result.txt"));
for(String s : b) {
bw.write(s);
bw.write("\r");
}
bw.flush();
bw.close();
}
}</pre>
<p> </p>
49 楼
John_Cena
2009-01-08
去重复
for (int i = 0; i < list.size() - 1; i++) {
for (int j = list.size() - 1; j > i; j--) {
if (((Student) list.get(j)).getName().equals(
((Student) list.get(i)).getName())) {
list.remove(j);}
}
}
for (int i = 0; i < list.size() - 1; i++) {
for (int j = list.size() - 1; j > i; j--) {
if (((Student) list.get(j)).getName().equals(
((Student) list.get(i)).getName())) {
list.remove(j);}
}
}
48 楼
centgo
2009-01-08
<p>需要注意的问题有这么几个:<br/>1.编码<br/>2.重复键<br/>3.速度<br/>4.可重用行<br/></p>
<pre name='code' class='java'>package com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class FileOrder {
public static final String charSet="gb2312";
public static void main(String[] args) {
FileOrder fo=new FileOrder();
System.out.println("begin");
List<Line> content=fo.readFile("c:\\Temp\\t1.txt");
Collections.sort(content);
fo.writeFile("c:\\Temp\\t2.txt", content);
System.out.println("end");
}
public void writeFile(String fileName,List<Line> content){
BufferedWriter br=null;
try {
br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName),charSet));
for(Line line:content){
br.write(line.getName()+" "+line.getId()+"\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public List<Line> readFile(String fileName){
BufferedReader br=null;
ArrayList<Line> content=new ArrayList<Line>();
try {
br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),charSet));
String line=null;
while((line=br.readLine())!=null){
String[] temp=line.split(" ");
content.add(new Line(Integer.parseInt(temp[1]), temp[0]));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(br!=null) br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return content;
}
class Line implements Comparable<Line>{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Line(int id,String name){
this.id=id;
this.name=name;
}
//大到小排序
@Override
public int compareTo(Line o) {
return id>o.id?1:(id<o.id?-1:0);
}
@Override
public String toString(){
return name+" "+id;
}
}
}
</pre>
<p> </p>
<pre name='code' class='java'>package com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class FileOrder {
public static final String charSet="gb2312";
public static void main(String[] args) {
FileOrder fo=new FileOrder();
System.out.println("begin");
List<Line> content=fo.readFile("c:\\Temp\\t1.txt");
Collections.sort(content);
fo.writeFile("c:\\Temp\\t2.txt", content);
System.out.println("end");
}
public void writeFile(String fileName,List<Line> content){
BufferedWriter br=null;
try {
br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName),charSet));
for(Line line:content){
br.write(line.getName()+" "+line.getId()+"\n");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public List<Line> readFile(String fileName){
BufferedReader br=null;
ArrayList<Line> content=new ArrayList<Line>();
try {
br=new BufferedReader(new InputStreamReader(new FileInputStream(fileName),charSet));
String line=null;
while((line=br.readLine())!=null){
String[] temp=line.split(" ");
content.add(new Line(Integer.parseInt(temp[1]), temp[0]));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(br!=null) br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return content;
}
class Line implements Comparable<Line>{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Line(int id,String name){
this.id=id;
this.name=name;
}
//大到小排序
@Override
public int compareTo(Line o) {
return id>o.id?1:(id<o.id?-1:0);
}
@Override
public String toString(){
return name+" "+id;
}
}
}
</pre>
<p> </p>
47 楼
tongyi121
2009-01-08
写个groovy的写法
def data = [:] new File('d:/test.txt').eachLine{ def line = it.tokenize() data.put(line[1].toInteger(),line[0]) } def outFile = new File('d:/sun.txt') def printWriter = outFile.newPrintWriter() data.keySet().sort().each{ printWriter.println("${data.get(it)} ${it}") } printWriter.flush() printWriter.close()
46 楼
jiagyao
2009-01-08
kjj 写道
问题的关键在重复key 和排序上 ,其他的都是次要的
恩,点到实质了,希望高手多发点解决这问题的方法。
45 楼
鹤惊昆仑
2009-01-07
shell sort 和java OO的2种解法都非常好。我来提供一个JavaScript的解法,仅供一笑,呵呵。
//假设str即是intel.txt的整个内容,则使用JavaScript如下可解
var arr=str.split("\n");
arr.sort(function(a,b){
return a.split("\b")[1]-b.split("\b")[1];
})
console.log(arr.join("\n"));//写入sun.txt。。。
//假设str即是intel.txt的整个内容,则使用JavaScript如下可解
var arr=str.split("\n");
arr.sort(function(a,b){
return a.split("\b")[1]-b.split("\b")[1];
})
console.log(arr.join("\n"));//写入sun.txt。。。
44 楼
kjj
2009-01-07
问题的关键在重复key 和排序上 ,其他的都是次要的
43 楼
java9981
2009-01-07
我也写个实现
package test; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class SortFile { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { sort("c:/test.txt", "c:/sun.txt"); } /** * 处理小文件排序,大文件排序会有性能问题 * @param fromFile * @param toFile */ public static void sort(String fromFile, String toFile) { //读取文件,大文件的时候不能一次读到内存 List lines = readFromFile(fromFile); //TODO 校验格式 //排序 Collections.sort(lines, new Comparator() { public int compare(Object o1, Object o2) { String s1 = (String) o1; String s2 = (String) o2; //每次都解析数字是较慢的,数据较多时考虑用Map缓存 String i1 = s1.substring(s1.indexOf(' ') + 1); String i2 = s2.substring(s1.indexOf(' ') + 1); //升序排列 return Integer.parseInt(i1) - Integer.parseInt(i2); } }); //写文件 writeToFile(toFile, lines); } private static List readFromFile(String fileName) { ArrayList<String> lines = new ArrayList<String>(); BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(fileName)); String line = ""; while ((line = reader.readLine()) != null) { lines.add(line); } } catch (FileNotFoundException e) { throw new RuntimeException("文件不存在", e); } catch (IOException e) { throw new RuntimeException("读取文件出错", e); } finally { try { if (reader != null) reader.close(); } catch (IOException e) { e.printStackTrace(); } } return lines; } private static void writeToFile(String fileName, List lines) { PrintWriter writer = null; try { writer = new PrintWriter(fileName); for (int i = 0; i < lines.size(); i++) { writer.println(lines.get(i)); } } catch (FileNotFoundException e) { throw new RuntimeException("文件不存在", e); } finally { if (writer != null) writer.close(); } } }
42 楼
shenjianwangyi
2009-01-07
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
明明有treeset 会自动的给你自然排序 干嘛用list啊
41 楼
E生迅徒
2009-01-07
linkobe 写道
agiha 写道
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.ArrayList;
import java.util.LinkedList;
import java.util.Arrays;
public class SortFile{
// private Map<Integer,String> map;
// private Set<Integer> set;
private LinkedList<Integer> keyList=new LinkedList<Integer>();
private LinkedList<String> valueList=new LinkedList<String>();
public SortFile(){
// map=new HashMap<Integer,String>();
// set=new TreeSet<Integer>();
}
public static void main(String[] args){
String filename = "D:/test1.txt";
String toFilename = "D:/test2.txt";
new SortFile().sortFile(filename, toFilename);
}
public void sortFile(String filename,String toFilename){
File file = new File(filename);
BufferedReader reader=null;
File toFile = new File(toFilename);
PrintWriter writer = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
String[] ss = null;
while((tempString = reader.readLine()) != null){
ss = tempString.split(" ");
String value = ss[0];
Integer key=Integer.parseInt(ss[1]);
keyList.add(key);
valueList.add(value);
}
int size=keyList.size();
Integer[] sortlist=keyList.toArray(new Integer[size]);
Arrays.sort(sortlist);
writer = new PrintWriter(new FileOutputStream(toFile));
for(Integer key : sortlist){
int index=keyList.indexOf(key);
String value=valueList.remove(index);
keyList.remove(index);
writer.println(value+" "+key);
}
writer.flush();
}
catch (Exception ex) {
}
finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
writer.close();
}
}
}
这个能解决重复问题。
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Arrays;
public class SortFile{
// private Map<Integer,String> map;
// private Set<Integer> set;
private LinkedList<Integer> keyList=new LinkedList<Integer>();
private LinkedList<String> valueList=new LinkedList<String>();
public SortFile(){
// map=new HashMap<Integer,String>();
// set=new TreeSet<Integer>();
}
public static void main(String[] args){
String filename = "D:/test1.txt";
String toFilename = "D:/test2.txt";
new SortFile().sortFile(filename, toFilename);
}
public void sortFile(String filename,String toFilename){
File file = new File(filename);
BufferedReader reader=null;
File toFile = new File(toFilename);
PrintWriter writer = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
String[] ss = null;
while((tempString = reader.readLine()) != null){
ss = tempString.split(" ");
String value = ss[0];
Integer key=Integer.parseInt(ss[1]);
keyList.add(key);
valueList.add(value);
}
int size=keyList.size();
Integer[] sortlist=keyList.toArray(new Integer[size]);
Arrays.sort(sortlist);
writer = new PrintWriter(new FileOutputStream(toFile));
for(Integer key : sortlist){
int index=keyList.indexOf(key);
String value=valueList.remove(index);
keyList.remove(index);
writer.println(value+" "+key);
}
writer.flush();
}
catch (Exception ex) {
}
finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
writer.close();
}
}
}
这个能解决重复问题。
正解
哎,昨天没好好看agiha给的例子,晕倒,害我昨晚还自己写了一下,今天早上一看,竟然写重复了
PS:写windows shell 的兄弟就是快手的说
40 楼
阳光晒晒
2009-01-07
Collections.sort(list , myComparator);
而myComparator的写法.必须实现Comparator
PS:相同key多值问题可以用....
org.apache.commons.collections.MultiMap
本题是用不到了.
BS_考API的人对API不一定了解.
了解的人不一定会考API
而myComparator的写法.必须实现Comparator
PS:相同key多值问题可以用....
org.apache.commons.collections.MultiMap
本题是用不到了.
BS_考API的人对API不一定了解.
了解的人不一定会考API
39 楼
linkobe
2009-01-07
agiha 写道
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.ArrayList;
import java.util.LinkedList;
import java.util.Arrays;
public class SortFile{
// private Map<Integer,String> map;
// private Set<Integer> set;
private LinkedList<Integer> keyList=new LinkedList<Integer>();
private LinkedList<String> valueList=new LinkedList<String>();
public SortFile(){
// map=new HashMap<Integer,String>();
// set=new TreeSet<Integer>();
}
public static void main(String[] args){
String filename = "D:/test1.txt";
String toFilename = "D:/test2.txt";
new SortFile().sortFile(filename, toFilename);
}
public void sortFile(String filename,String toFilename){
File file = new File(filename);
BufferedReader reader=null;
File toFile = new File(toFilename);
PrintWriter writer = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
String[] ss = null;
while((tempString = reader.readLine()) != null){
ss = tempString.split(" ");
String value = ss[0];
Integer key=Integer.parseInt(ss[1]);
keyList.add(key);
valueList.add(value);
}
int size=keyList.size();
Integer[] sortlist=keyList.toArray(new Integer[size]);
Arrays.sort(sortlist);
writer = new PrintWriter(new FileOutputStream(toFile));
for(Integer key : sortlist){
int index=keyList.indexOf(key);
String value=valueList.remove(index);
keyList.remove(index);
writer.println(value+" "+key);
}
writer.flush();
}
catch (Exception ex) {
}
finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
writer.close();
}
}
}
这个能解决重复问题。
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Arrays;
public class SortFile{
// private Map<Integer,String> map;
// private Set<Integer> set;
private LinkedList<Integer> keyList=new LinkedList<Integer>();
private LinkedList<String> valueList=new LinkedList<String>();
public SortFile(){
// map=new HashMap<Integer,String>();
// set=new TreeSet<Integer>();
}
public static void main(String[] args){
String filename = "D:/test1.txt";
String toFilename = "D:/test2.txt";
new SortFile().sortFile(filename, toFilename);
}
public void sortFile(String filename,String toFilename){
File file = new File(filename);
BufferedReader reader=null;
File toFile = new File(toFilename);
PrintWriter writer = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
String[] ss = null;
while((tempString = reader.readLine()) != null){
ss = tempString.split(" ");
String value = ss[0];
Integer key=Integer.parseInt(ss[1]);
keyList.add(key);
valueList.add(value);
}
int size=keyList.size();
Integer[] sortlist=keyList.toArray(new Integer[size]);
Arrays.sort(sortlist);
writer = new PrintWriter(new FileOutputStream(toFile));
for(Integer key : sortlist){
int index=keyList.indexOf(key);
String value=valueList.remove(index);
keyList.remove(index);
writer.println(value+" "+key);
}
writer.flush();
}
catch (Exception ex) {
}
finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
writer.close();
}
}
}
这个能解决重复问题。
正解
38 楼
liangguanhui
2009-01-06
sort +1n intel.txt>sun.txt
37 楼
E生迅徒
2009-01-06
期待大牛出来解决相同key值的问题
36 楼
trydofor
2009-01-06
E生迅徒 写道
trydofor 写道
个人建议;
1. 命名不规范,不可取 read_writeFile
2. map是unique key,如果有数值相同的或同名的咋整
3. 简单实现,就是楼上提到的shell, sort -k2n <t.txt > r.txt
4. 排序,用API,自己写Comparator
5. 前置条件检查,public int compare(Object o1, Object o2),最好做null判断.
1. 命名不规范,不可取 read_writeFile
2. map是unique key,如果有数值相同的或同名的咋整
3. 简单实现,就是楼上提到的shell, sort -k2n <t.txt > r.txt
4. 排序,用API,自己写Comparator
5. 前置条件检查,public int compare(Object o1, Object o2),最好做null判断.
后面两种方法能不能详细说明下
4. java.util.Arrays.*
java.util.Collections.sort(list);
5. if(o1 == null) return xxx;
if(o2 == null) // xxx;
就是如果参数是null,如果参与排序,是放头还是放尾,或者扔异常
35 楼
jiagyao
2009-01-06
kulinglei 写道
你用正则表达式把它搞成数组,排序,我看好简单啊,
你写的好复杂,有没有意义
你写的好复杂,有没有意义
正则表达式,还真不太了解 ,能把正则表达式贴出来吗
34 楼
jiagyao
2009-01-06
呵呵 没想到小小一题 竟暴露出那么多弊端 长知识了
33 楼
jiagyao
2009-01-06
trydofor 写道
个人建议;
1. 命名不规范,不可取 read_writeFile
2. map是unique key,如果有数值相同的或同名的咋整
3. 简单实现,就是楼上提到的shell, sort -k2n <t.txt > r.txt
4. 排序,用API,自己写Comparator
5. 前置条件检查,public int compare(Object o1, Object o2),最好做null判断.
1. 命名不规范,不可取 read_writeFile
2. map是unique key,如果有数值相同的或同名的咋整
3. 简单实现,就是楼上提到的shell, sort -k2n <t.txt > r.txt
4. 排序,用API,自己写Comparator
5. 前置条件检查,public int compare(Object o1, Object o2),最好做null判断.
谢谢,指正编码规范是该看看了
相关推荐
【标题解析】 "华为笔试题目--程序设计类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`函数...