gpt4 book ai didi

java - 如何按每行中的值对存储在文本文件中的条目进行排序

转载 作者:行者123 更新时间:2023-12-02 11:12:26 24 4
gpt4 key购买 nike

我有一个包含一些数据、数字和分数的文本文件,我需要按高分(10,9,8,7,6...)对这些数据进行排序

我该怎么做?

也许通过读取并创建ArrayList?或拆分它

我不知道该怎么做

I need to sort this text by Score (2,2,1,0.8,...)

        saveButton = new JButton(" Save ");
saveButton.setBackground(Color.white);
saveButton.setForeground(Color.black);
saveButton.setFont(normalFont);

saveButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
PrintWriter writer = null;
String newLine = System.getProperty("line.separator");
String textFieldVal = textField.getText();

double Dsise = size;
double Dsec = sec;
double pt = (Dsise * Dsise) / Dsec;
DecimalFormat df = new DecimalFormat("#.####");
try {
writer = new PrintWriter(new BufferedWriter(new FileWriter("HighScores.txt", true)));
writer.println(textFieldVal + " (Time: " + sec + ", grid: " + size + "x" + size + ") " + "Score : " + df.format(pt));
writer.close();
} catch (IOException e1) {
e1.printStackTrace();
}

System.exit(0);

try {
Check();
} catch (IOException e1) {
e1.printStackTrace();
}


}

});





}

public void Check() throws IOException {

// here i need to sort it
}
}

here i have a text, what i need to sort

我尝试通过扫描仪执行此操作,但不起作用

最佳答案

尚不清楚您需要的输出是什么,但基本上有以下步骤:

  1. 逐行读取文件。您可以使用 BufferedReader为此,或更现代的 Java 8 方法,通过获取 StreamStrings ,每个字符串代表一行。

    Stream<String> lines = Files.lines(Paths.get(fileName));

  2. 将每个字符串转换为您要保留的信息。你想要名字吗?你想要分数吗?您想要所有信息(时间、网格等)吗?如果您只需要分数,您可以找到字符串 Score : 的索引,添加 8,并从那里取出字符串的子字符串,这将是您的分数,您可以将其转换为整数。获得数据后,您只需使用集合或流提供的排序机制之一对其进行排序。

    List<Double> scores = lines
    .map(line -> line.substring(line.indexOf("Score :") + 8))
    .map(Double::parseDouble)
    .sorted(Comparator.reverseOrder())
    .collect(Collectors.toList());

如果您需要姓名和其余详细信息,则必须创建一个携带数据(姓名、时间等)的特定对象,而不是仅提取填充该对象的分数。然后将在分数属性上进行排序。从您的问题来看,尚不清楚这是否是您所需要的。

更新:从评论看来,所有数据实际上都是必需的。

要保留所有数据,您必须首先创建一个代表文件中一行的对象。不幸的是,您的字符串的格式并不真正一致,如果将值分隔如下会更容易:

Bogdan,2,2x2,2
Leo,6,2x2,0.6667

因此,如果您可以修改粘贴在问题中的函数以这种格式输出,那么对您来说会更容易,因为您只需使用 String.split(",") 。否则你必须找到每个数据项所在的位置,用 indexOf()substring()并提取它。这对你来说是一个练习。

public class Player {
private final String name;
private final int time;
private final String grid;
private final double score;

public Player(String name, int time, String grid, double score) {
this.name = name;
this.time = time;
this.grid = grid;
this.score = score;
}

public double getScore() {
return score;
}

// todo: put all the getters

public static Player parse(String line) {
//todo: extract the data items from the string...
}

@Override
public String toString() {
return String.format("%s (Time: %d Grid: %s) Score: %.4f", name, time, grid, score);
}
}

您的流处理会变得更加简单:

List<Player> scores = lines
.map(Player::parse)
.sorted(Comparator.comparingDouble(Player::getScore).reversed())
.collect(Collectors.toList());

关于java - 如何按每行中的值对存储在文本文件中的条目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50531748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com