Java代码写歌词_歌词整理的程序实现

该博客介绍了一个Java程序,用于读取.lrc歌词文件,识别时间线并按时间顺序整理歌词,最后将排序后的歌词保存到指定目录。程序通过JFileChooser选择文件和目录,并使用BufferedReader和正则表达式进行文本处理。
摘要由CSDN通过智能技术生成

importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.Dimension;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Iterator;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importjavax.swing.JButton;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;publicclassSortLrc {privateFile lrcFile=null;privateString lrcDir="";privateJFileChooser dirChoose=newJFileChooser();privateJFileChooser fileChoose=newJFileChooser();privateJFileChooser chooser=newJFileChooser();privateJButton saveButton=newJButton("保存路径");privateJButton selectButton=newJButton("选择lrc文件");privateJLabel saveLable=newJLabel("d:");privateJLabel selectLable=newJLabel("d:");privateJPanel panelButton=newJPanel();privateJPanel panelLabel=newJPanel();privateJPanel panelSort=newJPanel();privateJButton sortButton=newJButton("排序歌词");publicSortLrc() {

JFrame frame=newJFrame("歌词文件整理");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//选择目录,选择文件的话注释掉这行。dirChoose.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

fileChoose.setFileSelectionMode(JFileChooser.FILES_ONLY);

saveButton.addActionListener(newActionListener() {publicvoidactionPerformed(ActionEvent e) {intretValue=dirChoose.showSaveDialog(saveButton);if(retValue==JFileChooser.APPROVE_OPTION) {

lrcDir=dirChoose.getSelectedFile().toString();

saveLable.setText(dirChoose.getSelectedFile().toString());

}

}

});

selectButton.addActionListener(newActionListener() {publicvoidactionPerformed(ActionEvent e) {intretValue=fileChoose.showSaveDialog(selectButton);if(retValue==JFileChooser.APPROVE_OPTION) {

lrcFile=fileChoose.getSelectedFile();

selectLable

.setText(fileChoose.getSelectedFile().toString());

}

}

});

sortButton.addActionListener(newActionListener() {

@OverridepublicvoidactionPerformed(ActionEvent e) {try{

sortLrc();

}catch(IOException iOE) {

System.out.println("整理歌词失败");

}

}

});

panelButton.add(selectButton);

panelLabel.add(selectLable);

panelButton.add(saveButton);

panelLabel.add(saveLable);

panelSort.add(sortButton);

panelLabel.setLayout(newGridLayout(2,2,20,20));

panelButton.setLayout(newGridLayout(2,2,20,20));

Container pane=frame.getContentPane();

pane.setLayout(newBorderLayout());

pane.add(panelButton, BorderLayout.WEST);

pane.add(panelLabel, BorderLayout.CENTER);

pane.add(panelSort, BorderLayout.SOUTH);

frame.setPreferredSize(newDimension(400,300));

frame.pack();

frame.setLocation(400,200);

frame.setVisible(true);

}privatevoidsortLrc()throwsIOException {

ArrayListsortList=newArrayList();

FileReader fr=newFileReader(lrcFile);

BufferedReader br=newBufferedReader(fr);

StringBuilder sb=newStringBuilder();

String str="";while((str=br.readLine())!=null) {if(!isTimeLine(str)) {

sb.append(str+"\n");

}else{

speLine(str, sortList);

}

}

Collections.sort(sortList);for(Iteratoriterator=sortList.iterator(); iterator

.hasNext();) {

LrcTimeFormat lrcTimeFormat=(LrcTimeFormat) iterator.next();

sb.append(lrcTimeFormat+"\n");

}

File sortFile=newFile(lrcDir+"\\"+lrcFile.getName());

System.out.println(sortFile.getAbsolutePath());

FileWriter fw=newFileWriter(sortFile);

fw.write(sb.toString());

br.close();

fr.close();

fw.close();

}privatestaticBoolean isTimeLine(String str) {

String timeRege=".*\\[[\\d]{2}\\:[\\d]{2}\\.[\\d]{2}\\].*";returnstr.matches(timeRege);

}privatestaticvoidspeLine(String str, ArrayListlist) {

String timeRege="\\[[\\d]{2}\\:[\\d]{2}\\.[\\d]{2}\\]";

Pattern p=Pattern.compile(timeRege);

Matcher m=p.matcher(str);

String tail=str.replaceAll("\\[.*\\]","");while(m.find()) {

String lineUnit=m.group()+tail;//System.out.println(lineUnit);list.add(newLrcTimeFormat(lineUnit));

}

}publicstaticvoidmain(String[] args) {newSortLrc();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值