java對lrc型別檔案進行解析
package com.routon.utils; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.util.Log; /** * parse lrc file tool * eg: * utilLrc lrc = new utilLrc("/sdcard/test.lrc"); * get song name : String title = lrc.getTitle(); * get performer name : String artist = lrc.getArtist(); * get album name: String album = lrc.getAlbum(); * get lrcmaker name: String lrcMaker = lrc.getLrcMaker(); * get song list: List<Statement> list = lrc.getLrcList(); * * @author xuweilin * */ public class utilLrc { private static String TAG = "utilLrc"; public class Statement { private double time = 0.0; //time, 0.01s private String lyric = ""; //song word /* * get time */ public double getTime() { return time; } /* * set time */ public void setTime(double time) { this.time = time; } /* * set time.format:mm:ss.ms */ public void setTime(String time) { String str[] = time.split(":|\\."); this.time = Integer.parseInt(str[0])*60+Integer.parseInt(str[1])+Integer.parseInt(str[2])*0.01; } /* * get lrc word */ public String getLyric() { return lyric; } /* * set lrc word */ public void setLyric(String lyric) { this.lyric = lyric; } } private BufferedReader bufferReader = null; private String title = ""; private String artist = ""; private String album = ""; private String lrcMaker = ""; private List<Statement> statements = new ArrayList<Statement>(); /* * * fileName */ public utilLrc(String fileName) throws IOException{ FileInputStream file = new FileInputStream(fileName); bufferReader = new BufferedReader(new InputStreamReader(file, "utf-8")); readData(); } /* * read the file */ private void readData() throws IOException{ statements.clear(); String strLine; while(null != (strLine = bufferReader.readLine())) { if("".equals(strLine.trim())) { continue; } if(null == title || "".equals(title.trim())) { Pattern pattern = Pattern.compile("\\[ti:(.+?)\\]"); Matcher matcher = pattern.matcher(strLine); if(matcher.find()) { title=matcher.group(1); continue; } } if(null == artist || "".equals(artist.trim())) { Pattern pattern = Pattern.compile("\\[ar:(.+?)\\]"); Matcher matcher = pattern.matcher(strLine); if(matcher.find()) { artist=matcher.group(1); continue; } } if(null == album || "".equals(album.trim())) { Pattern pattern = Pattern.compile("\\[al:(.+?)\\]"); Matcher matcher = pattern.matcher(strLine); if(matcher.find()) { album=matcher.group(1); continue; } } if(null == lrcMaker || "".equals(lrcMaker.trim())) { Pattern pattern = Pattern.compile("\\[by:(.+?)\\]"); Matcher matcher = pattern.matcher(strLine); if(matcher.find()) { lrcMaker=matcher.group(1); continue; } } int timeNum=0; String str[] = strLine.split("\\]"); for(int i=0; i<str.length; ++i) { String str2[] = str[i].split("\\["); str[i] = str2[str2.length-1]; if(isTime(str[i])){ ++timeNum; } } for(int i=0; i<timeNum;++i) { Statement sm = new Statement(); sm.setTime(str[i]); if(timeNum<str.length) { sm.setLyric(str[str.length-1]); } statements.add(sm); } } sortLyric(); } /* * judge the string is or not date format. */ private boolean isTime(String string) { String str[] = string.split(":|\\."); if(3!=str.length) { return false; } try{ for(int i=0;i<str.length;++i) { Integer.parseInt(str[i]); } } catch(NumberFormatException e) { Log.e(TAG, "isTime exception:"+e.getMessage()); return false; } return true; } /* * sort the word by time. */ private void sortLyric() { for(int i=0;i<statements.size()-1;++i) { int index=i; double delta=Double.MAX_VALUE; boolean moveFlag = false; for(int j=i+1;j<statements.size();++j) { double sub; if(0>=(sub=statements.get(i).getTime()-statements.get(j).getTime())) { continue; } moveFlag=true; if(sub<delta) { delta=sub; index=j+1; } } if(moveFlag) { statements.add(index, statements.get(i)); statements.remove(i); --i; } } } /** * get title * @return */ public String getTitle(){ return title; } /** * get artist * @return */ public String getArtist(){ return artist; } /** * get album * @return */ public String getAlbum(){ return album; } /** * get lrc maker * @return */ public String getLrcMaker(){ return lrcMaker; } /** * get song list * @return */ public List<Statement> getLrcList(){ return statements; } }
相關推薦
java對lrc型別檔案進行解析
package com.routon.utils; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.Inpu
python對某一路徑下的某種型別檔案進行批量重新命名
"""對某一路徑下的某種型別檔案進行批量重新命名""" import os #檔案路徑,注意用/或\\,不能用\ path='D:\\CrawledData' #返回指定的資料夾包含的檔案或資料夾的名字的列表 file_list=os.listdir(path) n=0 for file_obj i
Python指令碼--基於正則表示式對檔案進行解析
Python指令碼--基於正則表示式對檔案進行解析 首先需要了解正則表示式中的相應指令(compile、findall),我對此的理解是compile相當於一個規則的制定者,將匹配的規則制定出來,後續具體的操作是findall的工作【選擇適當的規則
【XML解析】(1)Java下使用JAXP中的DOM解析方式對XML文件進行解析
關於JAXP、DOM、SAX: 何為JAXP? JAXP(JavaApi for Xml Programming) – sun公司的一套操作XML的API。 JAXP中分為三種解析方式: DOM解析、SAX解析、StAX
使用tar和gzip對某資料夾內的某型別檔案進行壓縮與解壓縮
有時候,需要對某個資料夾內的某個型別的檔案進行壓縮。由於使用tar壓縮時會把絕對路徑也壓縮排去,這時解壓縮則會多出這些資料夾結構,很麻煩,那麼使用如下命令: tar -C /dir1/dir2 -czvf /dir3/dir4/my.tar.gz *.ext1 解釋如下
Java——對時間型別進行運算(前移、後移、加減操作)
摘要:記錄一下,如何在java 程式中對獲取到的時間進行前移操作,或者是後移操作。比如:獲取時間是2018/07/02/ 17:30:00,怎麼將該時間往前(後)推移8個小時<可跨天>目錄簡介1.程式碼塊一、話不多說,直接上程式碼public Date dealT
用Java對CSV文件進行讀寫操作
分隔 sta 讀取csv文件 pan [] out pub set all 需要jar包:javacsv-2.0.jar 讀操作 // 讀取csv文件的內容 public static ArrayList<String> readCsv(String
使用pull方式和sax方式對xml文件進行解析
tostring 需要 nts tag .com version thp response pri 這是我自己設置的xml文件 用一下方式獲取它的內容 try{ OkHttpClient client = new OkHttpClient(); Request
如何輸出html原始碼,對html程式碼不進行解析
我們知道,瀏覽器會自動解析html程式碼,直接輸出解析後的效果。但有時我們希望輸出程式碼結構,並不想被解析,有辦法做到嗎?答案是肯定的,下面介紹下直接輸出原始碼的方法。 方法一:<xmp>標籤 把不需要被解析的html程式碼放入標籤<xmp><\xmp>
git對已有檔案進行忽略提交
1、場景描述 本地開發Django專案argus,/argus/settings.py檔案因有資料庫地址不想根據版本每次進行提交。 2、具體操作 2.1、到git根目錄,找到.gitignore檔案並開啟,新增內容: /argus/settings.py 2.2、提交.
Android 4.4 網路get請求出現中文亂碼 導致伺服器無法對傳輸的資料進行解析
最近在進行Android開發的過程中,發現了一個問題,特意在這裡記錄一下。下面我來描述一下這個問題:當我在Android 4.4版本進行http get請求的時候,我的get請求連結裡的中文字串顯示為???,導致伺服器不能正常識別我的引數,從而使程式執行出錯(並不是所有的An
java對提交的字串進行非法字元的過濾
public String CheckReplace(String s) { try { if ((s == null) || (s.equals(""))) return "";
perl指令碼遍歷資料夾及對SAC波形檔案進行去儀器響應、濾波等操作實現
1. 如題,perl指令碼遍歷子資料夾及對子資料夾下檔案處理: #!/usr/bin/env perl #遍歷資料夾$rawpath下的所有子目錄,並對子目錄下的檔案進行操作; my $rawpath="/home/liuyi/evt_test"; opendir (
java對日期Date類進行加減運算、年份加減,月份加減
日期比較:簡單的比較可以以字串的形式直接比較,也可使用java.sql.Date.valueOf("2007-03-08").compareTo(java.sql.Date.valueOf("2007-03-18")) 方式來比較日期的大小.也可使用java.util.Date.after(java.util
java對MongoDB3.4.2進行增刪改條件查詢操作
一段完整的MongoDB基本操作Demo,實現了連線資料庫,進行增刪改查操作,其中條件查詢實現了與sql中and和or查詢 public class MongoDBJDBC { public static void main(String[] args){
java對List型列表進行排序(通過內部類對compare(**)方法重寫)
Collections.sort(upgradeUsefulList, new Comparator<List<Object>>(){ public int compare(List&l
Java 對Double 型別四捨五入
下面簡單給出三種:個人喜歡第一種,比較靈活,保留多少位很方便設定 import java.math.RoundingMode; import java.text.NumberFormat; publ
java 對兩個list進行“交集,並集,差集,去重複並集”的操作
@Test public void testTwoList(){ List<String> a = new ArrayList<String>(); List<
使用Cmder在Windows下按照時間對大日誌檔案進行切分
首先下載安裝Cmder,下載地址:http://cmder.net/ 下載完整版,解壓到沒有中文的路徑下。在Path中新增cmder的位置,要到bin目錄。 這一步做完已經可以使用Cmder了,但是為了方便,需要註冊右鍵選單。 使用管理員身份開啟cmd視窗,執行下面這一條命令 cmd
類似於c語言讀取檔案進行解析
$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.date('d').'_error.log'; //$log_file_name = '