16° C
15° C
18° C
13° C
17° C
19° C
21° C
20° C
16° C
import java.io.*;
import java.util.*;
public class temperatur {
public static void main(String[] args) throws IOException {
BufferedReader reader = null;
PrintWriter outputStream = null;
ArrayList<String> rows = new ArrayList<String>();
try {
reader = new BufferedReader(new FileReader("temp.txt"));
outputStream = new PrintWriter(new FileWriter("tempout.txt"));
String file;
while ((file = reader .readLine()) != null) {
rows.add(file);
}
Collections.sort(rows);
String[] strArr= rows.toArray(new String[0]);
for (String cur : strArr)
outputStream.println(cur);
} finally {
if (reader != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
}
}
下面是如何对行
中已经有的行进行排序的示例。这是假设您希望保留原始行,而不是重建它们。
解析和排序
理想情况下,使用一个类来保存行的内容和数值,例如:
//simplified, add setters, getters etc.
class Line {
String content;
double temp;
}
List<Line> rows = ...
String lineContent;
while ((lineContent= reader .readLine()) != null) {
double temp = Double.parseDouble(lineContent.split("°")[0]);
rows.add(new Line(lineContent, temp));
}
字符串通过比较字符进行排序,因此“10”
将被认为小于“2”
。因此,我们需要使用一个“诀窍”:
Collections.sort(rows, Comparator.comparing(String::length)
.thenComparing(Function.identity())
.reversed());
请注意,如果数字可以为负数或具有不同的格式(即不同长度的分数、不同数量的空格、行中的附加数据等),这将中断。在这些情况下,编译器需要更加复杂,复杂性越高,使用“解析和排序”方法就越容易。
Collections.sort(rows, (String left, String right) -> {
char c1Left = left.charAt(0);
char c1Right = right.charAt(0);
int direction = -1; //1 for ascending
//negative numbers are smaller than 0 or positive numbers
int result = Integer.compare(c1Left == '-' ? -1 : 0, c1Right == '-' ? -1 : 0);
if( result != 0) {
return result * direction;
}
//at this point, both numbers are either both positive or both negative
//for negative numbers we need to reserve direction since we'll only compare "absolute values"
if( c1Right == '-' ) {
direction *= -1;
}
String subLeft = Character.isDigit(c1Left) ? left : left.substring(1);
String subRight = Character.isDigit(c1Right) ? right : right.substring(1);
//shorter numbers are smaller than longer numbers (takes care of cases like 2 vs 10 or 3.1 vs 21.0)
result = Integer.compare(subLeft.length(), subRight.length());
if( result != 0) {
return result * direction;
}
//sign and length are equal, the rest is a simple character comparison
result = subLeft.compareTo(subRight);
return result * direction;
});
问题内容: 我有一个带有单词列表的文本文件,我需要使用Java按字母顺序对其进行排序。单词位于单独的行上。 我将如何处理,将它们读入数组列表,然后进行排序? 问题答案: 这是一个简单的四步过程,其中Stackoverflow问题解决了四个步骤中的三个: 阅读每一行并将其转换为Java String 将每个Java字符串存储在一个数组中(不要认为您需要引用它。) 排序数组 写出数组中的每个Java字
问题内容: 首先,我发布此内容是因为当我在寻找以下问题的解决方案时,我在stackoverflow上找不到该解决方案。因此,我希望在此处增加一些知识库。 我需要处理目录中的某些文件,并且需要对文件进行数字排序。我在wiki.python.org上找到了一些有关排序的示例(尤其是使用模式),并将它们放在一起: 我对Python还是很陌生,想问一下社区是否可以对此进行任何改进:缩短代码(删除),性能,
问题内容: 我需要对.flv文件进行数字排序,并且能够使用以下命令执行此操作: 但是有很多文件(数百个),因此无法正确排序。 但是奇怪的是,如果我在不起作用的情况下破坏了该命令。 我可以只使用ls,但文件夹中还有其他文件类型。 到目前为止我尝试过的是: 问题答案: 我会尝试以下代码。适用于我的测试场景: 所述列表上的每个线FLV文件1中,需要在每行开始对第二个字符的第一(且仅一个)字(开始数)。按
问题内容: 如何按两列对CSV文件进行排序?现在,我可以按一列对其进行排序。我需要按前两列对其进行排序。怎么做?这是我用来按其第一列进行排序的代码: 编辑:两列排序后的输出变为: 我需要这样的输出: 但是,我希望第三列显示当前在第三列中显示的值中X的最小值,然后显示Y的最小值,然后显示Z。 问题答案: 尽管创建类作为 域的 适当表示通常是一个好主意:在这种情况下,我 不同意 注释。 读取CSV并按
问题内容: 这是我的代码,它有效!但我希望能够根据名称,大小,修改日期等对文件列表进行排序 问题答案: 您可以定义许多不同的类来进行不同的比较,例如: 然后,您只需将它们换出: 要么
问题内容: 当我们使用命令时,文件以一种排序的方式显示其内容,如果我不想得到任何种类的输出,而是一个经过排序的文件怎么办? 问题答案: 您可以使用文件重定向来重定向排序后的输出: 或者你也可以使用,排序的选项,以指示相同的输入和输出文件: 注意: 一个常见的错误是试图将输出重定向到相同的输入文件(例如)。这不起作用,因为外壳正在进行重定向(而不是 sort(1) 程序),并且在为 sort(1)