繁体   English   中英

数组列表排序困难

[英]Trouble Sorting an array list

有没有更好的方法可以对此进行排序,以获得正确的订单? 谢谢

import java.io.*;
import java.util.*;


public class JpgDirToHtm
{
    public static void main(String[] args) throws FileNotFoundException
    {




        Scanner kb = new Scanner(System.in);  
        System.out.print("Enter the path of the folder whose contents you wish to insert into an html file: ");
        String path = kb.nextLine(); 



        File folder = new File(path);
        File[] listOfFiles = folder.listFiles();
        ArrayList<String> htmlTextList = new ArrayList<String>();

        for (int i = 0; i < listOfFiles.length; i++)
        {
            if (listOfFiles[i].isFile())
            {
                htmlTextList.add(listOfFiles[i].getName() );
            }


        }

        Collections.sort(htmlTextList);

        System.out.println(htmlTextList);
   }
}

这就是它打印的内容[1.jpeg,10.jpg,11.jpeg,12.jpeg,13.jpeg,14.jpeg,16.jpg,17.jpg,18.jpg,19.jpg,2.jpeg, 20.jpg,21.jpg,22.jpg,23.jpg,24.jpg,25.jpg,3.jpg,5.jpg,7.jpeg,9.jpg]

我需要2.jpeg才能加入1.jpeg等。

抱歉,可能有一个简单的修复程序,但我在Google上找不到任何东西。 我是编程新手。

其他一切都很好。 整个程序可以拍摄数千张照片,并以正确的大小自动将它们放置在html网页中,并且每页可以设置给定数量的照片。 如果有人对剩下的代码感兴趣,我将其发布。

编写自己的比较器:

    Collections.sort(list, new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
            String filename1 =o1.substring(0,o1.indexOf("."));
            String filename2 =o2.substring(0,o2.indexOf("."));
            return Integer.valueOf(filename1).compareTo(Integer.valueOf(filename2));
        }
    });

这会将文件名转换为整数并进行比较。 但是请注意,仅当文件名是数字时才有效!

您将必须编写自己的比较器,并注意以数字或字符串开头的flie场景:

public class JpgDirToHtm
{

    public static void main(String[] args) throws FileNotFoundException
    {
        Scanner kb = new Scanner(System.in);  
        System.out.print("Enter the path of the folder whose contents you wish to insert into an html file: ");
        String path = kb.nextLine(); 

        File folder = new File(path);
        File[] listOfFiles = folder.listFiles();
        ArrayList<String> htmlTextList = new ArrayList<String>();

        for (int i = 0; i < listOfFiles.length; i++)
        {
            if (listOfFiles[i].isFile())
            {
                htmlTextList.add(listOfFiles[i].getName() );
            }


        }

        Collections.sort(htmlTextList, new Sortbyname());

        System.out.println(htmlTextList);
    }
}

class Sortbyname implements Comparator<String> 
{ 
    // Used for sorting in ascending order of 
    // roll name 
    public int compare(String a, String b) 
    { 
        String tempA = a.split("\\.")[0];
        String tempB = b.split("\\.")[0];

        try
        {
            return Integer.parseInt(tempA)-Integer.parseInt(tempB);
        }
        catch (Exception e)
        {
            return a.compareTo(b); 
        }
    } 
} 

该代码捕获格式化数字的任何异常,只是回退到String compare。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM