- 浏览: 99252 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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;
}
}
后面两种方法能不能详细说明下
首先谢谢您能花那么几分钟来点评教导,我会认真打好基础的。帖子发出去也想到了TreeMap的key不能重复的问题,一旦重复就只显示相同key的其中的一条
恩 应该可以 ,还有不用TreeMap排序的方法吗?用TreeMap还要自己定义个比较器
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.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public class SortFile{
private Map<Integer,String> map;
private Set<Integer> set;
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]);
map.put(key,value);
set.add(key);
}
writer = new PrintWriter(new FileOutputStream(toFile));
for(Integer key : set){
String value=map.get(key);
writer.println(value+" "+key);
}
writer.flush();
}
catch (Exception ex) {
}
finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
writer.close();
}
}
}
恩 应该可以 ,还有不用TreeMap排序的方法吗?用TreeMap还要自己定义个比较器
小王【空格】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;
}
}
评论
32 楼
E生迅徒
2009-01-06
对了,还有存在相同key的情况,map肯定是不能用了,是不是只能自己写Comparator?
31 楼
E生迅徒
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判断.
后面两种方法能不能详细说明下
30 楼
wrong1111
2009-01-06
老实说,我当年毕业找工作的时候就遇到了这个题目,,其实现在想想当初想法很可笑的。。
把字符分成二个字符串数据。在第一个数据排序换位的,最终确定的时候,把带有字符的第二个字符串也同样的下标换位。最后,并排输出二个数组就OK了。。
把字符分成二个字符串数据。在第一个数据排序换位的,最终确定的时候,把带有字符的第二个字符串也同样的下标换位。最后,并排输出二个数组就OK了。。
29 楼
trydofor
2009-01-06
个人建议;
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判断.
28 楼
kulinglei
2009-01-06
你用正则表达式把它搞成数组,排序,我看好简单啊,
你写的好复杂,有没有意义
你写的好复杂,有没有意义
27 楼
jiagyao
2009-01-06
谢谢大家的指教,当时编写时的确没注意到面向对象的使用就只想功能的实现了,小弟这受教了!
26 楼
jd2bs
2009-01-06
很基本的问题
但很重要
但很重要
25 楼
agiha
2009-01-06
弄的太复杂了吧?真要考虑可扩展性那要拆分好多类和方法。
再下去sping和面向接口都出来了
再下去sping和面向接口都出来了
24 楼
jiagyao
2009-01-06
呵呵 LS 正解
23 楼
kim_ouyang
2009-01-06
<div class='quote_title'>datuo 写道</div>
<div class='quote_div'>自己把文本里面一行的东西定义个对象。实现Comparable接口 <br/>
<pre name='code' class='java'>class Student implements Comparable
{
int age;
String name;
public Student(int age, String name)
{
this.age = age;
this.name = name;
}
public int compareTo(Object o)
{
Student s = (Student)o;
return age > s.age ? 1:(age == s.age ? 0 : -1);
}
}
</pre>
<br/>随便你用什么排序都行了。还可以扩展到多个属性。</div>
<p> </p>
<p> 这种思路是很好的,也能很好解决后面数字重复的问题。而且这种完全用了面向对象的思想。</p>
<p> 代码如下:student.java封装文件中的对象, Test.java为测试类</p>
<pre name='code' class='java'>public class Student implements Comparable<Student> {
private String name;
private int orderNumber;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(int orderNumber) {
this.orderNumber = orderNumber;
}
public int compareTo(Student o) {
// return this.orderNumber>o.orderNumber?1:(this.orderNumber==o.orderNumber?0:-1);//小到大排序
return o.orderNumber > this.orderNumber ? 1
: (o.orderNumber == this.orderNumber ? 0 : -1);// 大到小排序
}
}</pre>
<p> </p>
<p>Test.java</p>
<pre name='code' class='java'>import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] ars){
Test test = new Test();
test.sortFile("d:/source.txt", "d:/dest.txt");
}
public void sortFile(String sourceFile, String destFile) {
BufferedReader bReader = null;
PrintWriter pWriter = null;
try {
bReader = new BufferedReader(new InputStreamReader(
new FileInputStream(sourceFile)));
String keyString = bReader.readLine();
List<Student> list = new ArrayList<Student>();
while (keyString != null) {
String[] ar = keyString.split(" ");
Student student = new Student();
student.setName(ar[0]);
student.setOrderNumber(Integer.parseInt(ar[1]));
list.add(student);
keyString = bReader.readLine();
}
System.out.println("读取文件成功...");
Object[] objects = list.toArray();
Arrays.sort(objects);
pWriter = new PrintWriter(new FileOutputStream(destFile));
for (Object o:objects) {
Student student = (Student) o;
pWriter.println(new StringBuilder(student.getName())
.append(" ").append(student.getOrderNumber())
.toString());
}
pWriter.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bReader != null) {
try {
bReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (pWriter != null) {
pWriter.close();
}
}
System.out.println("保存文件成功....");
}
}
</pre>
<p> </p>
<div class='quote_div'>自己把文本里面一行的东西定义个对象。实现Comparable接口 <br/>
<pre name='code' class='java'>class Student implements Comparable
{
int age;
String name;
public Student(int age, String name)
{
this.age = age;
this.name = name;
}
public int compareTo(Object o)
{
Student s = (Student)o;
return age > s.age ? 1:(age == s.age ? 0 : -1);
}
}
</pre>
<br/>随便你用什么排序都行了。还可以扩展到多个属性。</div>
<p> </p>
<p> 这种思路是很好的,也能很好解决后面数字重复的问题。而且这种完全用了面向对象的思想。</p>
<p> 代码如下:student.java封装文件中的对象, Test.java为测试类</p>
<pre name='code' class='java'>public class Student implements Comparable<Student> {
private String name;
private int orderNumber;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(int orderNumber) {
this.orderNumber = orderNumber;
}
public int compareTo(Student o) {
// return this.orderNumber>o.orderNumber?1:(this.orderNumber==o.orderNumber?0:-1);//小到大排序
return o.orderNumber > this.orderNumber ? 1
: (o.orderNumber == this.orderNumber ? 0 : -1);// 大到小排序
}
}</pre>
<p> </p>
<p>Test.java</p>
<pre name='code' class='java'>import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] ars){
Test test = new Test();
test.sortFile("d:/source.txt", "d:/dest.txt");
}
public void sortFile(String sourceFile, String destFile) {
BufferedReader bReader = null;
PrintWriter pWriter = null;
try {
bReader = new BufferedReader(new InputStreamReader(
new FileInputStream(sourceFile)));
String keyString = bReader.readLine();
List<Student> list = new ArrayList<Student>();
while (keyString != null) {
String[] ar = keyString.split(" ");
Student student = new Student();
student.setName(ar[0]);
student.setOrderNumber(Integer.parseInt(ar[1]));
list.add(student);
keyString = bReader.readLine();
}
System.out.println("读取文件成功...");
Object[] objects = list.toArray();
Arrays.sort(objects);
pWriter = new PrintWriter(new FileOutputStream(destFile));
for (Object o:objects) {
Student student = (Student) o;
pWriter.println(new StringBuilder(student.getName())
.append(" ").append(student.getOrderNumber())
.toString());
}
pWriter.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bReader != null) {
try {
bReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (pWriter != null) {
pWriter.close();
}
}
System.out.println("保存文件成功....");
}
}
</pre>
<p> </p>
22 楼
cloudhxc
2009-01-06
LZ啊,公司面试肯定不是检查API那么简单。
JAVA上机做题一般要涉及面向对象的思维啊,可扩展性什么的,你写的纯粹就是面向过程的代码,所以看起来就是考验API,然后被刷也不知道为什么。
代码实现基本就是楼上 datuo那个意思。 关键词:对象~~
JAVA上机做题一般要涉及面向对象的思维啊,可扩展性什么的,你写的纯粹就是面向过程的代码,所以看起来就是考验API,然后被刷也不知道为什么。
代码实现基本就是楼上 datuo那个意思。 关键词:对象~~
21 楼
agiha
2009-01-06
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();
}
}
}
这个能解决重复问题。
20 楼
jiagyao
2009-01-06
<div class='quote_title'>kim_ouyang 写道</div>
<div class='quote_div'>
<pre name='code' class='java'>public void sortFile(String sourceFile, String destFile) {
BufferedReader bReader = null;
PrintWriter pWriter = null;
try {
bReader = new BufferedReader(new InputStreamReader(
new FileInputStream(sourceFile)));
String keyString = bReader.readLine();
Map<Integer, String> map = new HashMap<Integer, String>();
while (keyString != null) {
String[] ar = keyString.split(" ");
map.put(Integer.valueOf(ar[1]), ar[0]);
keyString = bReader.readLine();
}
System.out.println("读取文件成功...");
Object[] objects = map.keySet().toArray();
Arrays.sort(objects);
pWriter = new PrintWriter(new FileOutputStream(destFile));
int len = objects.length;
for (int i = len - 1; i >= 0; i--)
pWriter.println(new StringBuilder(map.get(objects[i])).append(
" ").append(objects[i]).toString());
pWriter.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bReader != null) {
try {
bReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (pWriter != null) {
pWriter.close();
}
}
System.out.println("保存文件成功....");
}</pre>
<pre name='code' class='java'>恩,不错 如果脱离这道题实际点的话和我一样没考虑到数字的 重复问题</pre>
<pre name='code' class='java'/>
<p> </p>
</div>
<p> </p>
<div class='quote_div'>
<pre name='code' class='java'>public void sortFile(String sourceFile, String destFile) {
BufferedReader bReader = null;
PrintWriter pWriter = null;
try {
bReader = new BufferedReader(new InputStreamReader(
new FileInputStream(sourceFile)));
String keyString = bReader.readLine();
Map<Integer, String> map = new HashMap<Integer, String>();
while (keyString != null) {
String[] ar = keyString.split(" ");
map.put(Integer.valueOf(ar[1]), ar[0]);
keyString = bReader.readLine();
}
System.out.println("读取文件成功...");
Object[] objects = map.keySet().toArray();
Arrays.sort(objects);
pWriter = new PrintWriter(new FileOutputStream(destFile));
int len = objects.length;
for (int i = len - 1; i >= 0; i--)
pWriter.println(new StringBuilder(map.get(objects[i])).append(
" ").append(objects[i]).toString());
pWriter.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bReader != null) {
try {
bReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (pWriter != null) {
pWriter.close();
}
}
System.out.println("保存文件成功....");
}</pre>
<pre name='code' class='java'>恩,不错 如果脱离这道题实际点的话和我一样没考虑到数字的 重复问题</pre>
<pre name='code' class='java'/>
<p> </p>
</div>
<p> </p>
19 楼
datuo
2009-01-06
自己把文本里面一行的东西定义个对象。实现Comparable接口
随便你用什么排序都行了。还可以扩展到多个属性。
class Student implements Comparable { int age; String name; public Student(int age, String name) { this.age = age; this.name = name; } public int compareTo(Object o) { Student s = (Student)o; return age > s.age ? 1:(age == s.age ? 0 : -1); } }
随便你用什么排序都行了。还可以扩展到多个属性。
18 楼
kim_ouyang
2009-01-06
<pre name='code' class='java'>public void sortFile(String sourceFile, String destFile) {
BufferedReader bReader = null;
PrintWriter pWriter = null;
try {
bReader = new BufferedReader(new InputStreamReader(
new FileInputStream(sourceFile)));
String keyString = bReader.readLine();
Map<Integer, String> map = new HashMap<Integer, String>();
while (keyString != null) {
String[] ar = keyString.split(" ");
map.put(Integer.valueOf(ar[1]), ar[0]);
keyString = bReader.readLine();
}
System.out.println("读取文件成功...");
Object[] objects = map.keySet().toArray();
Arrays.sort(objects);
pWriter = new PrintWriter(new FileOutputStream(destFile));
int len = objects.length;
for (int i = len - 1; i >= 0; i--)
pWriter.println(new StringBuilder(map.get(objects[i])).append(
" ").append(objects[i]).toString());
pWriter.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bReader != null) {
try {
bReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (pWriter != null) {
pWriter.close();
}
}
System.out.println("保存文件成功....");
}</pre>
<p> </p>
BufferedReader bReader = null;
PrintWriter pWriter = null;
try {
bReader = new BufferedReader(new InputStreamReader(
new FileInputStream(sourceFile)));
String keyString = bReader.readLine();
Map<Integer, String> map = new HashMap<Integer, String>();
while (keyString != null) {
String[] ar = keyString.split(" ");
map.put(Integer.valueOf(ar[1]), ar[0]);
keyString = bReader.readLine();
}
System.out.println("读取文件成功...");
Object[] objects = map.keySet().toArray();
Arrays.sort(objects);
pWriter = new PrintWriter(new FileOutputStream(destFile));
int len = objects.length;
for (int i = len - 1; i >= 0; i--)
pWriter.println(new StringBuilder(map.get(objects[i])).append(
" ").append(objects[i]).toString());
pWriter.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bReader != null) {
try {
bReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (pWriter != null) {
pWriter.close();
}
}
System.out.println("保存文件成功....");
}</pre>
<p> </p>
17 楼
jiagyao
2009-01-06
icefishc 写道
你好LZ,
首先, 老实说我不会JAVA。 所以我说的有可能是错的。
很不幸我认为你写的是错的。
这里不应该用map map表达的是key 和 value的映射
注意key是唯一的是一种集合的概念。
(如果java中的map是一种dup map那算我没说.)
具体到你的问题文件中的内容应该保存在list里
之后的做法一般有2种
1. list中的元素是每行中的内容。 自定义比较方法每次比较时都去从这个string中解析那个int. 这种方法比较省事只要自己定义一个比较方法就可以了
2. 上一个方法有个比较明显的缺点是 每次比较都要解析一次字符串 效率较差。所以在list中可以保存每行内容和数值的一个pair. (java中好像没有内置的pair类型, 可以自己写一个, 不过几行代码的事。 或者直接使用元素为Object类型的list)
建议:
踏实一点不要 听LS几位的认为这是个API问题就不重视. 实际这事概念问题 :p
刚毕业打好基础很重要.
祝你好运
首先, 老实说我不会JAVA。 所以我说的有可能是错的。
很不幸我认为你写的是错的。
这里不应该用map map表达的是key 和 value的映射
注意key是唯一的是一种集合的概念。
(如果java中的map是一种dup map那算我没说.)
具体到你的问题文件中的内容应该保存在list里
之后的做法一般有2种
1. list中的元素是每行中的内容。 自定义比较方法每次比较时都去从这个string中解析那个int. 这种方法比较省事只要自己定义一个比较方法就可以了
2. 上一个方法有个比较明显的缺点是 每次比较都要解析一次字符串 效率较差。所以在list中可以保存每行内容和数值的一个pair. (java中好像没有内置的pair类型, 可以自己写一个, 不过几行代码的事。 或者直接使用元素为Object类型的list)
建议:
踏实一点不要 听LS几位的认为这是个API问题就不重视. 实际这事概念问题 :p
刚毕业打好基础很重要.
祝你好运
首先谢谢您能花那么几分钟来点评教导,我会认真打好基础的。帖子发出去也想到了TreeMap的key不能重复的问题,一旦重复就只显示相同key的其中的一条
16 楼
hongkong
2009-01-06
cat intel.txt | sort -k2n > sun.txt
15 楼
icefishc
2009-01-06
你好LZ,
首先, 老实说我不会JAVA。 所以我说的有可能是错的。
很不幸我认为你写的是错的。
这里不应该用map map表达的是key 和 value的映射
注意key是唯一的是一种集合的概念。
(如果java中的map是一种dup map那算我没说.)
具体到你的问题文件中的内容应该保存在list里
之后的做法一般有2种
1. list中的元素是每行中的内容。 自定义比较方法每次比较时都去从这个string中解析那个int. 这种方法比较省事只要自己定义一个比较方法就可以了
2. 上一个方法有个比较明显的缺点是 每次比较都要解析一次字符串 效率较差。所以在list中可以保存每行内容和数值的一个pair. (java中好像没有内置的pair类型, 可以自己写一个, 不过几行代码的事。 或者直接使用元素为Object类型的list)
建议:
踏实一点不要 听LS几位的认为这是个API问题就不重视. 实际这事概念问题 :p
刚毕业打好基础很重要.
祝你好运
首先, 老实说我不会JAVA。 所以我说的有可能是错的。
很不幸我认为你写的是错的。
这里不应该用map map表达的是key 和 value的映射
注意key是唯一的是一种集合的概念。
(如果java中的map是一种dup map那算我没说.)
具体到你的问题文件中的内容应该保存在list里
之后的做法一般有2种
1. list中的元素是每行中的内容。 自定义比较方法每次比较时都去从这个string中解析那个int. 这种方法比较省事只要自己定义一个比较方法就可以了
2. 上一个方法有个比较明显的缺点是 每次比较都要解析一次字符串 效率较差。所以在list中可以保存每行内容和数值的一个pair. (java中好像没有内置的pair类型, 可以自己写一个, 不过几行代码的事。 或者直接使用元素为Object类型的list)
建议:
踏实一点不要 听LS几位的认为这是个API问题就不重视. 实际这事概念问题 :p
刚毕业打好基础很重要.
祝你好运
14 楼
agiha
2009-01-06
jiagyao 写道
only_java 写道
不可以这样吗?
TreeMap map=new TreeMap();
integer保存数字,List保存名字+数字?
TreeMap map=new TreeMap();
integer保存数字,List保存名字+数字?
恩 应该可以 ,还有不用TreeMap排序的方法吗?用TreeMap还要自己定义个比较器
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.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public class SortFile{
private Map<Integer,String> map;
private Set<Integer> set;
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]);
map.put(key,value);
set.add(key);
}
writer = new PrintWriter(new FileOutputStream(toFile));
for(Integer key : set){
String value=map.get(key);
writer.println(value+" "+key);
}
writer.flush();
}
catch (Exception ex) {
}
finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
writer.close();
}
}
}
13 楼
jiagyao
2009-01-06
only_java 写道
不可以这样吗?
TreeMap<Integer,List> map=new TreeMap<Integer,List>();
integer保存数字,List保存名字+数字?
TreeMap<Integer,List> map=new TreeMap<Integer,List>();
integer保存数字,List保存名字+数字?
恩 应该可以 ,还有不用TreeMap排序的方法吗?用TreeMap还要自己定义个比较器
相关推荐
【标题解析】 "华为笔试题目--程序设计类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`函数...