更改歌曲后缀-代码备忘录

Posted 三号小玩家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更改歌曲后缀-代码备忘录相关的知识,希望对你有一定的参考价值。

package com.java1234.todo;

import java.io.*;
import java.util.HashMap;
import java.util.Objects;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *  //沈亦晨 - 爱人错过 (小提琴版).flac //留下
 *
 *         //沈亦晨 - 爱人错过 (小提琴版).mp3
 *         //沈亦晨 - 爱人错过 (小提琴版)[mqms].mp3
 *         //沈亦晨 - 爱人错过 (小提琴版)[mqms2].mp3
 *         //沈亦晨 - 爱人错过 (小提琴版).ogg
 *         //沈亦晨 - 爱人错过 (小提琴版)[mqms].ogg
 *         //沈亦晨 - 爱人错过 (小提琴版) [mqms2].ogg
 */
public class FileTodo2 
    public static void main(String[] args) throws FileNotFoundException 

            String targetDirectory="/root/音乐";
            //搞成文件格式
        File file = new File(targetDirectory);
        //拿到所有文件名
        String[] list = file.list();
        HashMap<String, String> flacMap = new HashMap<>();

        for (int i = 0; i < list.length; i++) 
          String str=  list[i];
            //System.out.println(str);
            /// ---- -   --  -

            if(str.contains("flac"))
                flacMap.put(str.substring(0,str.indexOf(".flac")),"flac");
            

        

        for (int i = 0; i < list.length; i++) 
            String str1=  list[i];
            if(str1.contains("mp3"))
                //如果有,则删除
                String newstr1= "";

                String newstr2= "";
                try 
                    newstr2 = str1.substring(0,str1.indexOf("[mqms2].mp3"));
                 catch (Exception e) 
                    newstr2="";
                
                String newstr3= "";
                try 
                    newstr3 = str1.substring(0,str1.indexOf("[mqms].mp3"));
                 catch (Exception e) 
                    newstr3="";
                
                try 
                    if("".equals(newstr2)&&"".equals(newstr3))
                        newstr1 = str1.substring(0,str1.indexOf(".mp3"));
                    
                 catch (Exception e) 
                    newstr1="";
                
                if(flacMap.containsKey(newstr1)||flacMap.containsKey(newstr2)||flacMap.containsKey(newstr3))
                  //判断哪种,直接删除
                  File delfile = new File(targetDirectory +File.separator+ str1);
                  boolean delete = delfile.delete();
                  System.out.println(delfile);
              else
                    String newkey=newstr1+newstr2+newstr3;
                  //留下来
                    File updateNameFile = new File(targetDirectory+File.separator+ str1);
                    File renamefile = new File(targetDirectory + File.separator +newkey+ ".flac");
                    boolean flag = updateNameFile.renameTo(renamefile);
                     flacMap.put(newkey,"flac");
                  //转完之后加入到flac中
              
             
        


       

        for (int i = 0; i < list.length; i++) 
            String oggstr1=  list[i];
            if(oggstr1.contains("ogg"))
                //如果有,则删除
                String ogg_newstr1= "";

                String newstr2="";
                try 
                    newstr2 = oggstr1.substring(0,oggstr1.indexOf("[mqms2].ogg"));
                 catch (Exception e) 
                    newstr2="";
                
                String newstr3= "";
                try 
                    newstr3 = oggstr1.substring(0,oggstr1.indexOf("[mqms].ogg"));
                 catch (Exception e) 
                    newstr3="";
                
                try 

                    if("".equals(newstr2)&&"".equals(newstr3))
                        ogg_newstr1 = oggstr1.substring(0,oggstr1.indexOf(".ogg"));

                    
                 catch (Exception e) 
                    ogg_newstr1="";
                

                if(flacMap.containsKey(ogg_newstr1)||flacMap.containsKey(newstr2)||flacMap.containsKey(newstr3))
                    //判断哪种,直接删除
                    File delfile = new File(targetDirectory +File.separator+ oggstr1);
                    boolean delete = delfile.delete();
                    System.out.println(delfile);
                else
                    String newkey=ogg_newstr1+newstr2+newstr3;
                    //留下来
                    File updateNameFile = new File(targetDirectory+File.separator+ oggstr1);
                    File renamefile = new File(targetDirectory + File.separator +newkey + ".flac");
                    boolean flag = updateNameFile.renameTo(renamefile);
                     flacMap.put(newkey,"flac");
                
            
        


    





后缀自动机广义后缀自动机备忘录

前言

话说这玩意一两年前就会了。
然后太久没打了,都忘光了。

今天又有题要用这玩意儿,就再康了康。
话说稍微看了看记忆就又回了了。

还是要多复习啊。

后缀自动机

简称SAM。
以前还有个老话是“初三还不会SAM就退役把”

不多废话。(话说上面的不都是废话吗)

定义

后缀自动机就只是定义比较难理解而已。

  • 1、定义endpos数组表示某个子串在主串中出现的位置集合。
    • 举个例子就是abcabcabcaac,那么endpos(abc)=3,6,9
  • 1.5、定义一个自动机上节点的right表示当前点endpos集合相同的子串的集合。
  • 2、定义maxlen和minlen表示自动机上一个节点上right集合的长度最大最小值。
  • 3、定义fail指针(没有fail指针就是没有自动机的灵魂)
    • 设当前节点为y,fail指针指向的位置为x。
    • 那么x满足x的right集合真包含y的right集合。
    • 且若有多个x满足上面条件,则x选择maxlen最大的那个。
性质
  • 1、显然如果两个字串的endpos全部相等,那么必然其中一个是另一个后缀。
  • 2、那么我们发现在maxlen和minlen这个区间内的字符串都是互为后缀的且连续。
  • 3、

以上是关于更改歌曲后缀-代码备忘录的主要内容,如果未能解决你的问题,请参考以下文章

后缀数组备忘

把这铃声的后缀把“m4a”格式改成“m4r,后戳怎么修改?

如何知道用户何时使用 Spotify API 更改歌曲

歌曲更改时如何更新 MPMusicPlayerController

歌曲更改时更新 LiveTile

当我停止使用功能播放歌曲并更改导航栏索引时,颤动的音乐继续播放