android讓文件按順序列表,Java/Android 獲取文件夾的文件列表(file.listFiles())并按名稱排序,中文優先...

排序規則

由于是中國人,習慣性看中文文件夾放前面比較順眼,因此在別人博客(https://blog.csdn.net/da_caoyuan/article/details/56664673)的基礎上,加上了本身的排序規則。算法

默認排序規則是按照ASCII碼表排序(http://ascii.911cha.com/),排序的步驟大概是:部分符號->數字->部分符號->大寫字母->部分符號->小寫字母->部分符號->中文。ide

因此我修改了邏輯,排序變成:中文->數字->字母(不區分大小寫)->特殊字符spa

算法原理

一、將字符串不區分大小寫.net

二、把字符串中的中文變成拼音的首字母code

三、識別字符串的第一個字符,若是是中文則在前面加上字符“.”,用于在compareTo方法中,排在數字前面blog

四、識別字符串的第一個字符,若是是符號(看ASCII表)則在前面加上字符“{”,用于在compareTo方法中,排在Z后面排序

代碼

代碼就不上注釋了,也比較簡單ci

File[] files = new File(path).listFiles();

List list;

if (files == null) {

list = new ArrayList<>();

} else {

list = Arrays.asList(files);

}

Collections.sort(list, new Comparator() {

@Override

public int compare(File o1, File o2) {

if (o1.isDirectory() && o2.isFile())

return -1;

if (o1.isFile() && o2.isDirectory())

return 1;

String name1 = o1.getName().toUpperCase();

char c1 = name1.toCharArray()[0];

String name11 = "";

for (char c11 : name1.toCharArray()) {

name11 += Pinyin.toPinyin(c11);

}

if (c1 >= 0x4E00 && c1 <= 0x9FA5) {

name1 = "." + name11;

} else if (c1 < 48) {

name1 = "{" + name11;

} else if (c1 > 57 && c1 < 65) {

name1 = "{" + name11;

}

String name2 = o2.getName().toUpperCase();

char c2 = name2.toCharArray()[0];

String name22 = "";

for (char c22 : name2.toCharArray()) {

name22 += Pinyin.toPinyin(c22);

}

if (c2 >= 0x4E00 && c2 <= 0x9FA5) {

name2 = "." + name22;

} else if (c2 < 48) {

name2 = "{" + name22;

} else if (c2 > 57 && c2 < 65) {

name2 = "{" + name22;

}

return name1.compareTo(name2);

}

});

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259352.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259352.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259352.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用C語言寫解釋器(一)——我們的目標

聲明為提高教學質量&#xff0c;我所在的學院正在籌劃編寫C語言教材。《用C語言寫解釋器》系列文章經整理后將收入書中“綜合實驗”一章。因此該系列的文章主要閱讀對象定為剛學完C語言的學生&#xff08;不要求有數據結構等其它知識&#xff09;&#xff0c;所以行文比較羅嗦&…

【詳解Java中格式化處理】

在Java中我們需要對一個數字進行四舍五入處理或者是對一個字符串進行格式化處理&#xff0c;我們需要使用String.Format方法或者其他格式化方法 一、Format方法 比如&#xff1a;DecimalFormat df new DecimalFormat&#xff08;"#.00"&#xff09;&#xff1b;S…

HDU4506 小明系列故事——師兄幫幫忙

問題鏈接&#xff1a;HDU4506 小明系列故事——師兄幫幫忙。 問題描述&#xff1a;參見上述鏈接。 問題分析&#xff1a;&#xff08;略&#xff09;。 程序說明&#xff1a;函數powermod()是快速模冪函數。 AC的C語言程序如下&#xff1a; /* HDU4506 小明系列故事——師兄幫幫…

1_MVC+EF+Autofac(dbfirst)輕型項目框架_core層(以登陸為例)

前言 在上一篇0_MVCEFAutofac(dbfirst)輕型項目框架_基本框架中&#xff0c;我已經介紹了這個輕型框架的層次結構&#xff0c;在下面的這篇文章中&#xff0c;我將以教師登陸功能為例&#xff0c;具體來擴充下我的core層的代碼。 在這之前&#xff0c;我想先補充討論下是否有必…

文字轉語音+html5,JS實現文字轉語音并播放

html&#xff1a;div>audio>div>js&#xff1a;function doTTS() {var ttsDiv document.getElementById(bdtts_div_id);var ttsAudio document.getElementById(tts_autio_id);var ttsText document.getElementById(ttsText).value;// 文字轉語音ttsDiv.removeChild…

字符串的全排列和組合算法

全排列在筆試面試中很熱門&#xff0c;因為它難度適中&#xff0c;既可以考察遞歸實現&#xff0c;又能進一步考察非遞歸的實現&#xff0c;便于區分出考生的水平。所以在百度和迅雷的校園招聘以及程序員和軟件設計師的考試中都考到了&#xff0c;因此本文對全排列作下總結幫助…

設計模式基于C#的工程化實現及擴展

設計模式基于C#的工程化實現及擴展 轉載于:https://www.cnblogs.com/gzmg/p/3344833.html

Python實現atm機的功能

主要還是參考網上內容&#xff0c;自己做了修改。雖然代碼有小bug&#xff0c;但是不影響學習和測試。功能&#xff1a;1.額度&#xff1a;80002.可以提現&#xff0c;手續費5%3.每月最后一天出賬單&#xff0c;寫入文件4.記錄每月日常消費流水5.提供還款接口1.atm的腳本[rootp…

Direct ByteBuffer學習

ByteBuffer有兩種一種是heap ByteBuffer,該類對象分配在JVM的堆內存里面&#xff0c;直接由Java虛擬機負責垃圾回收&#xff0c;一種是direct ByteBuffer是通過jni在虛擬機外內存中分配的。通過jmap無法查看該快內存的使用情況。只能通過top來看它的內存使用情況。 JVM堆內存大…

魔獸爭霸Ⅲ運行時不能初始化directX的錯誤解決

運行魔獸爭霸3不能初始化DirectX錯誤這樣解決&#xff1a; 1&#xff1a;在運行中輸入(winr)&#xff1a;dxdiag&#xff0c;查看顯示欄&#xff0c;確定電腦已安裝好directx 8.1以上&#xff0c;且下面的三個加速都已開啟。 2&#xff1a;如果沒有安裝directx就下載安裝一個&a…

Android7.0占用空間,Android7.0 開發者注意事項

1、當設備處于充電狀態且屏幕已關閉一定時間后&#xff0c;設備會進入低電耗模式并應用第一部分限制&#xff1a;關閉應用網絡訪問、推遲作業和同步。如果進入低電耗模式后設備處于靜止狀態達到一定時間&#xff0c;系統則會對 PowerManager.WakeLock、AlarmManager 鬧鈴、GPS …

Android探索之旅 | 面向對象和Java基礎

-- 作者 謝恩銘 轉載請注明出處 上一篇 Android探索之旅 | Android簡介 中說到&#xff1a; "Android的默認開發語言是Java&#xff0c;入門簡單。而且&#xff0c;你的Java水平不需要多好就可以上手開發Android App了。" 不少朋友說看到后很是心安。 不過小編也不想…

DataGirdView 編輯項時的驗證

dgvConfig.DataSource CreateTable();dgvConfig.Columns["編號"].ReadOnly true; //只讀dgvConfig.AllowUserToAddRows false; //不允許添加新行dgvConfig.EditingControlShowing new DataGridViewEditingControlShowingEventHandler(dgvConfig_EditingControlS…

使用Vitamio打造自己的Android萬能播放器(7)——在線播放(下載視頻)

前言 本章將實現非常實用的功能——下載在線視頻。涉及到多線程、線程更新UI等技術&#xff0c;還需思考產品的設計&#xff0c;如何將新加的功能更好的融入到現有的產品中&#xff0c;并不是簡單的加一個界面就行了&#xff0c;歡迎大家交流產品設計和技術細節實現&#xff01…

生成0到1之間隨機數的C代碼

#include <stdlib.h>#include <stdio.h>#include <time.h>int main(){srand((unsigned)time(NULL));int i;double r;for(i0;i<50;i){r(float)rand()/RAND_MAX; printf("%f\n",r);}return 0;}

HTML聲明文檔類型后樣式出錯,doctype如何聲明

如何doctype聲明&#xff0c;新增的結構元素和功能元素HTML5已形成了最終的標準&#xff0c;概括來講&#xff0c;它主要是關于圖像&#xff0c;位置&#xff0c;存儲&#xff0c;多任務等功能的增加。 新增的元素有繪畫 canvas &#xff0c;用于媒介回放的 video 和 audio 元素…

Error-Project facet Java version 1.8 is not supported

最近導入最新的Strtus2.5.10.1 Demo時出現了這個錯誤 解決方案如下&#xff1a; 選中工程——右鍵——Properties 然后依次展開找到如圖所示內容&#xff0c;將1.8改成1.7即可。 原因&#xff1a;工程默認配置是1.8&#xff0c;而本地環境JDK版本為1.7&#xff0c;兩則不匹配造…

6.2

轉載于:https://www.cnblogs.com/tutuaixiaomei/p/3354356.html

Tomcat全攻略

內容&#xff1a; 一&#xff1a;簡單介紹二&#xff1a;安裝及配置三&#xff1a;應用四&#xff1a;綜述參考資料關于作者宗 鋒西北大學計算機系碩士2001 年 12 月 隨著java的流行&#xff0c;其在web上的應用也越來越廣&#xff0c;tomcat作為一個開源的servlet容器&#xf…

《G檔案》中關于游戲程序設計的文章

剛拿到前導的《G檔案》&#xff0c;發現了主程劉剛的文章&#xff0c;是目前我所見 到的關于游戲編程的最好的一篇&#xff0c;與大家共享。轉載&#xff1a;http://www.360doc.cn/article/2778_53476.html PC游戲編程 目錄 1 游戲程序理論 1.1 技術基礎 1.2 游戲底層 1.3 編…