-
读入txt文本按每行的末尾数字进行排序20
不规则的文本文件
1-2-5-4-6-19
4-3-1-8-10
1-2-6-7-10
1-20
如何排序输出?
1-20
1-2-5-4-6-19
4-3-1-8-10
1-2-6-7-10
也就是按最后一个数字的大小排序txt文本文件
谢谢2009年1月03日 18:38
4个答案 按时间排序 按投票排序
-
采纳的答案
还有另外一种做法就是了:写一个类让它存着要比较的行的内容,并在构造器里就记下该行最后一个数字的值。让这个类实现Comparable<T>接口,就可以很方便的直接用Collections.sort()来排序。
以前用其它语言写过一组类似的程序,也是这两种办法都用过。这里:http://rednaxelafx.iteye.com/blog/176731
import java.io.*; import java.util.*; public class SortFile { private static void printUsage() { System.out.println("Usage: java SortFile filename"); } private static boolean verifyArgs(String[] args) { return (1 <= args.length) && (new File(args[0]).isFile()); } public static void main(String[] args) { if (!verifyArgs(args)) { printUsage(); System.exit(1); } List<Line> lines = new ArrayList<Line>(); BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]))); String s = null; while (null != (s = in.readLine())) { lines.add(new Line(s)); } } catch(Exception e) { e.printStackTrace(); System.exit(1); } finally { if (null != in) { in.close(); } } Collections.sort(lines); for (Line l : lines) { // do whatever with the sorted lines System.out.println(l.getText()); } } } class Line implements Comparable<Line> { private int compareKey; private String text; public Line(String text) { this.text = text; this.compareKey = Integer.parseInt(text.substring(text.lastIndexOf('-'))); } public int compareTo(Line other) { return this.compareKey - other.compareKey; } public String getText() { return this.text; } }
2009年1月04日 00:17
-
嗯,数据量大的时候这样用正则表达式可能会带来性能问题
不过原问的描述太模糊了。如果有很强的保证说输入的文本文件一定是每行都为横杠分隔的数字,那么楼上的方法会非常合适。
另外如果是.NET的话可以用从右向左的匹配模式,只匹配结尾的\d+的话效率也不会很低。不过这边是Java就是了呃呵呵。2009年1月03日 23:04
-
楼上的回答不错, 但是数据多了, 可能性能有点问题, 楼主写的是: 也就是按最后一个数字的大小排序txt文本文件 。
那么我觉得可以这么抽取排序的数字
private int extractLastNumber(String s) {
int idx = s.lastIndexOf('-');
return Integer.parseInt(s.subString(idex+1)); //自己确定下idx
}
这样性能会提高不少。2009年1月03日 21:15
-
排序可以利用java.util.Collections类里的sort()方法。这组方法有两个重载,一个是按照自然顺序来对List<T>排序,另一个是指定一个自定义的Comparator<T>来指定排序方式。可以通过匿名内部类来方便的写出这里需要的Comparator<T>的实现,其中可以用正则表达式来抽取每行最后的数字。
SortFile.java:import java.io.*; import java.util.*; import java.util.regex.*; public class SortFile { private static void printUsage() { System.out.println("Usage: java SortFile filename"); } private static boolean verifyArgs(String[] args) { return (1 <= args.length) && (new File(args[0]).isFile()); } public static void main(String[] args) throws Exception { if (!verifyArgs(args)) { printUsage(); System.exit(1); } List<String> lines = new ArrayList<String>(); BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]))); String line = null; while (null != (line = in.readLine())) { lines.add(line); } } finally { if (null != in) { in.close(); } } Collections.sort(lines, new Comparator<String>() { private Pattern extractLastNumberPattern = Pattern.compile("\\d+$"); private int extractLastNumber(String s) { Matcher m = this.extractLastNumberPattern.matcher(s); if (!m.find()) { throw new RuntimeException("Invalid line format: missing number at the end of the line."); } return Integer.parseInt(m.group()); } public int compare(String first, String second) { int num1 = extractLastNumber(first); int num2 = extractLastNumber(second); return num2 - num1; // for descending order } public boolean equals(Object obj) { return obj.getClass().equals(this.getClass()); } }); for (String s : lines) { // do whatever with the sorted lines System.out.println(s); } } }
2009年1月03日 20:58
相关推荐
在C#编程中,将文本文件的内容读取到数组中并进行排序是一项常见的任务,尤其在处理大量数据或日志文件时。以下是如何实现这个过程的详细步骤。 首先,我们需要打开文本文件并逐行读取内容。在C#中,我们可以使用`...
读取一个文件中的整数,并将它们从小到大排序,最后输出排序后到另一个文件中
易语言作为一款面向初学者和专业人士的中文编程环境,提供了一种有效的方法来解决这个问题:随机读取大文本文件的一行内容。本篇将详细介绍如何使用易语言实现这个功能。 首先,理解“大文本文件随机读取一行内容”...
1. **从文本文件读取**:数组数据可以从外部文本文件中读取,这适用于大量数据或需要保存排序结果的情况。文件通常以特定格式(如逗号分隔值CSV)存储数据,程序需要解析这些数据并将其加载到数组中。 2. **随机生成...
通过这些命令,程序可以将文本文件的内容加载到内存中的字符串变量,以便进行进一步的处理或显示。例如: ```易语言 .打开文件("路径", .读取) .读取文件(.文件句柄, .文本内容) .关闭文件(.文件句柄) ``` 接下来...
【该资源仅供学习使用,不得用于其他目的】 「题目」 读入文件“file1.txt”,加行号后输出到文件“file2.txt”,统计并输出读入的行数和最长行的长度。
一、读入文本文件 在易语言中,可以使用“读取文件”命令来读取TXT文本文件的数据。这个命令通常配合“文件打开”和“文件关闭”命令一起使用。首先,用“文件打开”打开指定的TXT文件,然后使用“读取文件”读取...
in.dat里边存放有100个int型数字,请将其读出然后将其从小到大排序,并以文本的格式输出到out.dat里边保存,数字之间用空格隔开即可。
有时候不确定文本文档内有多少行数据,且数据还有表头,有行号,这些为字符串型,而内容为double型,怎样读入呢?放入结构体就好啦,真心不错
在Python3.4.3下实现逐行读取txt文本文件并进行去重处理,我们可以采用多种方法。首先,需要注意的是,文件操作应当考虑关闭文件描述符以避免资源泄露,同时注意字符编码以及代码的兼容性问题。 1. 利用文件对象...
本资源展示了一个基本的字符统计程序,用于统计从键盘读入的一段文本中的英文字母、数字、空格和其他字符的个数。该程序使用C语言编写,通过使用while循环和if语句来实现字符的统计。 知识点1: 字符输入 * getchar...
这个"TXT Delphi操作实例:读取、写入、保存等.rar"资源提供了关于如何在Delphi中处理TXT文本文件的实际示例,这对于任何想要在Delphi项目中实现文本文件操作的开发者来说都是一份宝贵的教程。 首先,让我们了解...
在Java编程语言中,打开和读取文本文件是一项基本任务,尤其对于初学者而言,这是理解文件I/O操作的关键步骤。下面我们将详细讲解如何编写一个Java程序,实现打开文本文件,逐行读取内容并将其作为字符串显示在屏幕...
通过使用 C 语言编程,实现从键盘读入一段文本,统计其中的英文字母、数字、空格和除此之外的其他字符个数。 标题解释 标题“计算文本中各种字符的个数”表明本节的主要内容是统计文本中各种字符的个数,包括英文...
C语言读入txt代码#include #include int main() { int a[2][3] = {5,2,8,4,9,7}; //比如说你要把它存到一个文件中。 char c='\n'; //定义换行转义字符 //现在你的源程序的目录下建立一个比如说是data.txt文件 ,...
文本文件的每一行可以看作一个元素,或者将整个文本视为一个字符数组。排序完成后,我们可以将排序后的结果写回文件,或者直接在界面上显示出来。易语言提供了“写文件”函数用于写入文件,同时有各种界面控件(如...
总的来说,这个C++程序展示了如何使用哈希表进行数字排序,它巧妙地利用了数组索引来映射和统计输入整数,从而实现了一种基于计数的排序算法。这种方法对于大规模数据集和有限的输入范围非常有效。
这个任务涉及到从文本文件中加载内容到程序的内存中,以便进行进一步的处理或显示。在易语言中,实现这一功能通常涉及到几个关键知识点,包括文件操作、字符串处理和语法结构。 1. **文件操作**:在易语言中,文件...
在处理英文文本时,首先进行的是预处理步骤,这通常包括去除标点符号、数字、特殊字符,转换为小写,以及消除停用词(如"a", "the", "is"等常见但对分类意义不大的单词)。这一过程有助于提高后续分析的准确性和...
当我们谈论“对选项进行排序”时,通常是指对一组数据或对象按照特定规则进行排列,以便于查找、分析或呈现信息。这涉及到多个方面的知识点,包括排序算法、数据结构以及编程实现。下面将详细阐述这些关键点。 1. *...