gpt4 book ai didi

java - 在文本文件android中对数字进行排序

转载 作者:行者123 更新时间:2023-11-29 04:46:13 27 4
gpt4 key购买 nike

我正在尝试使用 android 对文本文件中的数字进行排序。你能帮助我吗?此代码正在对部分而不是全部进行排序。我的意思是它排序 1.A 2.C 20.D 3.C 4.A 5.A 那样。它应该是 1.A 2.C 3.C 4.A 5.A 6.B 20.D 我需要转换整数,但我该怎么做?

尝试 {

           File root = new File(Environment.getExternalStorageDirectory(), "Notes");
if (!root.exists())
{
root.mkdirs();
}
File gpxfile = new File(root, fileName);
FileWriter writer = new FileWriter(gpxfile,true);
writer.append(s+"\n\n");
writer.flush();
writer.close();
FileReader fileReader = new FileReader(gpxfile);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String inputLine;
List<String> lineList = new ArrayList<String>();
while ((inputLine = bufferedReader.readLine()) != null) {
lineList.add(inputLine);
}
fileReader.close();
Collections.sort(lineList);
System.out.println(lineList);
FileWriter fileWriter = new FileWriter(gpxfile);
PrintWriter out = new PrintWriter(fileWriter);
for (String outputLine : lineList) {
out.println(outputLine);
}
out.flush();
out.close();
fileWriter.close();
//Toast.makeText(this, "Data has been written to Report File", Toast.LENGTH_SHORT).show();
}
catch(IOException e)
{
e.printStackTrace();
}

最佳答案

您当前正在对 String 进行排序,您需要对 Interger 进行排序

  1. 解析“1.A 20.A 30.A 2.B 20.C 3.A”

因为您的输入文件似乎包含字母和数字的混合,例如 "1.A 20.A 30.A 2.B 20.C 3.A" 您可以创建一个新的类实现 Comparable 以定义您自己的排序。

class Item implements Comparable<Item>{
String stringPart;
Integer intPart;
String c;

public Item(String c){
this.c = c;
String[] res = c.split("\\.");
intPart = Integer.valueOf(res[0]);
stringPart = res[1];
}

@Override
public int compareTo(Item o) {
if(intPart.intValue() == o.intPart.intValue()){
return stringPart.compareTo(o.stringPart);
}else{
return intPart.compareTo(o.intPart);
}
}

public String getContent(){
return c;
}
}

完成后,您可以根据新创建的类更改列表定义:

List<Item> lineList = new ArrayList<>();

您可以解析输入行以填充列表

List<Item> lineList = new ArrayList<>();
while ((inputLine = bufferedReader.readLine()) != null) {
String[] res = inputLine.split(" ");
for(String s : res){
lineList.add(new Item(s));
}
}

排序列表内容调用:

Collections.sort(lineList);

编写输出文件:

for (Item i : lineList) {
out.println(i.getContent());
}

输入

"1.A 20.A 30.A 2.B 20.C 3.A"

会产生

1.A 2.B 3.A 20.A 20.C 30.A

  1. 解析“A.1 A.20 A.30 B.2 C.20 A.30”

如果有这样的输入内容切换字符和数字"A.1 A.20 A.30 B.2 C.20 A.30"你只需要修改以下内容先按字符排序,然后按数字排序:

读取Item的内容

intPart = Integer.valueOf(res[1]);
stringPart = res[0];

排序方法:

@Override
public int compareTo(Item o) {
if(stringPart.equals(o.stringPart)){
return intPart.compareTo(o.intPart);
}else{
return stringPart.compareTo(o.stringPart);
}
}

关于java - 在文本文件android中对数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37020855/

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