更改歌曲后缀-代码备忘录
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");
作者:三号小玩家
出处:https://www.cnblogs.com/q1359720840/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 版权信息
后缀自动机广义后缀自动机备忘录
前言
话说这玩意一两年前就会了。
然后太久没打了,都忘光了。
今天又有题要用这玩意儿,就再康了康。
话说稍微看了看记忆就又回了了。
还是要多复习啊。
后缀自动机
简称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、
以上是关于更改歌曲后缀-代码备忘录的主要内容,如果未能解决你的问题,请参考以下文章