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

标签 java android file

我正在尝试使用 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/

相关文章:

java - 在单个 Java 语句中创建 JTextField 对象时设置其对象

java - 在运行时动态选择一个 spring-batch reader

java - asmack - 接收自定义 XML 消息

android - 上传照片到 Facebook : Adding parameters before executing the newUploadPhotoRequest call gives the 'OAuthException' error

python - 使用 Python 3.x 添加特定大小的列

java - 搜索包含正斜杠的字段的正确 mysql 查询是什么?

java - 从数据包 header 设置 Java 字节数组大小

java - ListView 内存泄漏

java - 获取android sdk中的文件大小?

文件不存在时 File::open() 出现 panic