各位大侠们,能不能帮我看一下这道题怎么做,俺是新手

lijavac 2012-11-10 11:05:35
各位大侠们,能不能帮我看一下这道题怎么做,俺是新手
题:
Java编程size]
有一个文本文件"c.txt"有多行内容,各行首部都包含一个行号和冒号,请按行号对各行进行排序,并在尾部写入冒号和本行字符数,然后保存在另一个文本文件"d.txt"之中。
比如:文件"c.txt"内容格式如下:
2: 教育部高校科研管理方法研讨会暨青委会西北片区成立大会在西安举行
4: 第14届亚洲地区英语语言测试研讨会在西安举行
3: 法国巴黎南十一大学代表团访问西安
1: 西安召开创先争优活动总结大会

...全文
198 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
diypyh 2012-11-11
  • 打赏
  • 举报
回复
因为我刚才写的代码没有做过多的验证,所以你的源文件一定要按照规则来写,之前的代码思路是这样的: 1.读取源文件 2.每读取一行,如“3: 法国巴黎南十一大学代表团访问西安”,就将这行字符串按“:”拆分成字符串数组,所以此行内容得到的数组有两个元素,分别是“3”和“ 法国巴黎南十一大学代表团访问西安”,再将第一个元素转变成一个整形(因为后面要排序处理)(注意:如果此时没有拆分好或者第一个元素得到的是一个非数字类型的字符串,在后面的转换过程就会出现异常,如NumberFormatException,所以一定要注意格式) 3.将每行的内容处理完后保存在一个Info类中,再放到集合中 4.按编号进行排序 5.再将排序好的集合写入到另一个文件中
wapigzhu 2012-11-11
  • 打赏
  • 举报
回复
引用 8 楼 lijavac 的回复:
又出现此情况,麻烦您再看一下吧
我估计是你的a.txt里面有空行吧 你把文件打开把最下面几行空的删掉试试 就是说,可能你的光标在箭头这个位置上 2: 教育部高校科研管理方法研讨会暨青委会西北片区成立大会在西安举行 4: 第14届亚洲地区英语语言测试研讨会在西安举行 3: 法国巴黎南十一大学代表团访问西安 1: 西安召开创先争优活动总结大会 <-- 往前删除几格 2: 教育部高校科研管理方法研讨会暨青委会西北片区成立大会在西安举行 4: 第14届亚洲地区英语语言测试研讨会在西安举行 3: 法国巴黎南十一大学代表团访问西安 1: 西安召开创先争优活动总结大会<-- 改成这样 或者在代码 temp = scan.next(); 后面加一句 if(temp.indexOf(':') < 0) continue;
diypyh 2012-11-11
  • 打赏
  • 举报
回复
引用 8 楼 lijavac 的回复:
又出现此情况,麻烦您再看一下吧
你的原文件一定要是这种格式: 2: 教育部高校科研管理方法研讨会暨青委会西北片区成立大会在西安举行 4: 第14届亚洲地区英语语言测试研讨会在西安举行 3: 法国巴黎南十一大学代表团访问西安 1: 西安召开创先争优活动总结大会 注意前面的编号不能有空格,编号后面的“:”一定要是英文(半角)的,不然就会报错了。
lijavac 2012-11-11
  • 打赏
  • 举报
回复
我基础有点差,我再看看书吧,还是要谢谢你们
lijavac 2012-11-11
  • 打赏
  • 举报
回复

又出现此情况,麻烦您再看一下吧
wapigzhu 2012-11-11
  • 打赏
  • 举报
回复
你把 String fileName = "./a.txt"; 改成 String fileName = "d:/a.txt"; 试试
lijavac 2012-11-11
  • 打赏
  • 举报
回复
我在D盘放着,那应该放哪?
wapigzhu 2012-11-11
  • 打赏
  • 举报
回复
这是没找到文件吧,你把c.txt放哪的
lijavac 2012-11-11
  • 打赏
  • 举报
回复
还是不行呀,对了,用的是JDK在DOS下运行的,不知道有影响没?
diypyh 2012-11-11
  • 打赏
  • 举报
回复
找到这两句,改成这样吧:

			scan.close();// 关闭
改:

		if (scan != null) {
			scan.close();// 关闭
		}

			out.close();// 关闭
改:

		if (out != null) {
			out.close();// 关闭
		}
我用MyEclipse测试过没有问题的,不知道你的是什么环境
lijavac 2012-11-11
  • 打赏
  • 举报
回复

运行时老出现这,请您帮我看一下
diypyh 2012-11-11
  • 打赏
  • 举报
回复

package com.pyh.demo1;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
* 有一个文本文件"c.txt"有多行内容
*
* 各行首部都包含一个行号和冒号
*
* 请按行号对各行进行排序
*
* 并在尾部写入冒号和本行字符数
*
* 然后保存在另一个文本文件"d.txt"之中。
*/
public class Demo1 {
/**
* 此方法是输入一个文件的路径,返回一个集合,集合里的每个元素就是文件中的每行内容
*/
public static List<Info> getInfo(String fileName) {
File file = new File(fileName);
if (file == null || file.length() < 1) {// 如果文件为空或没有内容,则返回null
return null;
}
List<Info> infos = new ArrayList<Info>();// 定义一个集合
Scanner scan = null;// 准备输入
try {
scan = new Scanner(file);
scan.useDelimiter("\r\n");// 设置一个分隔符
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String temp = null;
String[] arr = new String[2];
Info info = null;
while (scan.hasNext()) {// 循环读取内容
temp = scan.next();
arr = temp.split(":");// 将读取到的内容按“:”进行分割
info = new Info();// 实例化一个Info类,用于接收内容
info.setId(Integer.parseInt(arr[0]));// 设置编号
info.setInfo(arr[1]);// 设置内容
info.setCount(arr[1].length());// 设置内容的字符数,这里只是设置了内容的字符数,并不是本行的字符数
infos.add(info);// 增加到集合中
}
scan.close();// 关闭
return infos;
}

/**
* 给定一个集合和文件路径,此方法将集合里的内容写入到文件中
*/
public static void writeInfo(List<Info> infos, String fileName) {
PrintWriter out = null;// 准备输入
try {
out = new PrintWriter(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for (Info info : infos) {// 循环将内容写入到文件中
out.println(info.getId() + ":" + info.getInfo() + ":"
+ info.getCount());
}
out.close();// 关闭
}

public static void main(String[] args) {
String fileName = "./a.txt";
List<Info> infos = getInfo(fileName);// 读取内容
Collections.sort(infos);// 对集合进行排序
writeInfo(infos, "./b.txt");// 将集合里的内容写入文件
}
}

/**
* 一个临时类,主要用于记录编号,内容,字符数
*
* 实现Comparable接口是为了作排序比较的
*/
class Info implements Comparable<Info> {
private int id;// 编号
private String info;// 内容
private int count;// 字符数

public Info() {
}

public Info(int id, String info) {
this.id = id;
this.info = info;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getInfo() {
return info;
}

public void setInfo(String info) {
this.info = info;
}

public int getCount() {
return count;
}

public void setCount(int count) {
this.count = count;
}

/**
* 覆写此方法,定义了排序比较的规则
*/
public int compareTo(Info info) {
return this.getId() - info.getId();
}

}


51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧