所以我必须从Java中的文件中读出一个字符串。这是一个高分系统。 该文件的每一行都包含类似的内容:" 24 / Kilian"。 /前面的数字是得分,而/是名称后面的文字。
现在,我的问题是我必须将分数降序排序并将它们写回文件中。新分数应该覆盖旧分数。
我尝试了但是我无法正常工作。 我已经编写了一些代码,用于逐行读取得分+名称。
public static void sortScores() {
String [][]scores = null;
int i = 1;
try (BufferedReader br = new BufferedReader(new FileReader("score.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
scores[i][0] = line.substring(0, line.indexOf("/"));
scores[i][1] = line.substring(line.indexOf("/"), line.length());
i++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
所以,这段代码基本上将得分和名称写在2D数组中,如下所示:
得分[0] [0] =" 24&#34 ;;
得分[0] [1] ="基利安&#34 ;;
得分[1] [0] =" 33&#34 ;;
得分[1] [1] ="姓名&#34 ;;
得分[2] [0] =" 45&#34 ;;
得分[2] [1] =" AnotherName&#34 ;;
我希望有人可以帮我解决问题。
答案 0 :(得分:0)
将Arrays.sort(arr,comparator)与自定义比较器一起使用:
Arrays.sort(theArray, new Comparator<String[]>(){
@Override
public int compare(final String[] first, final String[] second){
// here you should usually check that first and second
// a) are not null and b) have at least two items
// updated after comments: comparing Double, not Strings
// makes more sense, thanks Bart Kiers
return Double.valueOf(second[1]).compareTo(
Double.valueOf(first[1])
);
}
});
System.out.println(Arrays.deepToString(theArray));
答案 1 :(得分:0)
我建议您制作一个新的class Score
,其中包含您的数据(得分+名称),并为Score
的每一行添加ArrayList
的新实例从文件中读取。之后,您可以实施Comparator
并对ArrayList
进行排序。它更容易,因为你不知道你的字符串数组有多大,你需要知道当你使用数组时。
public class Score {
public Score(int score, String name) {
this.score = score;
this.name = name;
}
int score;
String name;
// getter
}
List<Score> scoreList = new ArrayList<>();
String line;
while ((line = br.readLine()) != null) {
scoreList.add(new Score(Integer.parseInt(line.substring(0, line.indexOf("/"))), line.substring(line.indexOf("/"), line.length())));
}
Collections.sort(scoreList, new Comparator<Score>() {
public int compare(Score s1, Score s2) {
return s1.getScore() - s2.getScore();
}
}
// write to file
答案 2 :(得分:0)
您可以使用java.util.Arrays
&#39; s sort
- 方法:
Arrays.sort(scores, (a, b) -> -a[0].compareTo(b[0]));
但这会导致&#34; 3&#34;将高于&#34; 23&#34;。所以你可能应该创建一个保存值的新类并使用一个ArrayList
答案 3 :(得分:0)
你可以尝试一下:
HashMap<Integer, String > map = new HashMap<>();
try (BufferedReader br = new BufferedReader(new FileReader("score.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
String[] lines = line.split("/");
map.put(Integer.valueOf(lines[0]),lines[1]);
}
SortedSet<Integer> keys = new TreeSet<Integer>(map.keySet());
keys.forEach(k -> System.out.println(map.get(k).toString() + " value " + k ));