進一步人性化,以保證待處理文件的安全,類名爲ZuozhuanCalculatorExt_V321.
若直接使用代碼(可自由修改代碼,則以下“要求”可以不遵守。如何修改,可參考代碼中的注釋),對於待處理文件(*.txt)文本內容格式要求:不可以有標點;正文前可以有標題,標題里不得使用“△”“▲”符號;經、傳混排,在經文前加“△”符(不要依《春秋經傳集解》那樣加“經”字,以免影響統計),傳文前加“▲”符(不要依《春秋經傳集解》那樣加“傳”字,以免影響統計)。其餘參見1樓,有矛盾處,以此爲準。- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.IOException;
- import javax.swing.JFrame;
- import javax.swing.JOptionPane;
- public class ZuozhuanCalculatorExt_V321{
- public static void main(String args[]) {
- Input("");
- }
- static void Input(String S){
- String Str=JOptionPane.showInputDialog(new JFrame(),S+"請告訴我待處理文件的來源(例如,D:\\隱公.txt):\n 提示:注意防止輸入錯誤,如多按了空格鍵、只輸入了文件名等。","文件輸入",JOptionPane.PLAIN_MESSAGE);
- if (Str==null) calculate(null,null);
- else if(Str.equals("")) Input("未輸入。\n");
- else if(!new File(Str).exists()||!new File(Str).isFile()) Input("找不到此文件"+Str+"。\n");
- else{
- int result=JOptionPane.showConfirmDialog(new JFrame(),("確定讀取"+new File(Str).getAbsolutePath()+"?"),"文件輸入",JOptionPane.YES_NO_OPTION);
- if(result==JOptionPane.YES_OPTION) Output(Str,"");
- else if (result==JOptionPane.NO_OPTION) Input("");
- else calculate(null,null);
- }
- }
- static void Output(String path1,String S){
- String Str=JOptionPane.showInputDialog(new JFrame(),S+"請告訴我文件處理後輸出到(例如,D:\\隱公1.txt):","文件輸出",JOptionPane.PLAIN_MESSAGE);
- if (Str==null) calculate(null,null);
- else if(Str.equals("")) {Output(path1,"未輸入。\n");}
- else if(new File(Str).exists()&&new File(Str).isFile()) {
- int result=JOptionPane.showConfirmDialog(new JFrame(),("此路徑已有文件。\n確定寫入"+new File(Str).getAbsolutePath()+"?"),"文件輸出",JOptionPane.YES_NO_OPTION);
- if(result==JOptionPane.YES_OPTION) {
- if (new File(Str).getAbsolutePath().equals(new File(path1).getAbsolutePath())) RE(path1,Str,(byte)0);
- else OK(path1,Str);}
- else if(result==JOptionPane.NO_OPTION) Output(path1,"");
- else calculate(null,null);
- }
- else{
- int result=JOptionPane.showConfirmDialog(new JFrame(),("確定寫入"+new File(Str).getAbsolutePath()+"?"),"文件輸出",JOptionPane.YES_NO_OPTION);
- if(result==JOptionPane.YES_OPTION) OK(path1,Str);
- else if(result==JOptionPane.NO_OPTION) Output(path1,"");
- else calculate(null,null);
- }
- }
- static void OK(String path1,String path2){
- int result=JOptionPane.showConfirmDialog(new JFrame(),"待處理文件:"+new File(path1).getAbsolutePath()+"\n處理后寫入:"+new File(path2).getAbsolutePath()+"\n確定?(Y/N)","確認",JOptionPane.YES_NO_OPTION);
- if (result==JOptionPane.YES_OPTION) calculate(path1,path2);
- else if (result==JOptionPane.NO_OPTION) RE(path1,path2,(byte)1);
- else calculate(null,null);
- }
- static void RE(String path1,String path2,byte re){
- if(re==0) {
- int result=JOptionPane.showConfirmDialog(new JFrame(),"輸入路徑與輸出路徑衝突。\n重設輸出路徑(Y)或結束(N)?","設置",JOptionPane.YES_NO_OPTION);
- if (result==JOptionPane.YES_OPTION) Output(path1,"");
- else calculate(null,null);
- }
- else{
- int result=JOptionPane.showConfirmDialog(new JFrame(),"重置(Y)、結束(N)或繼續(取消)?","設置",JOptionPane.YES_NO_CANCEL_OPTION);
- if (result==JOptionPane.YES_OPTION) Input("");
- else if(result==JOptionPane.CANCEL_OPTION) OK(path1,path2);
- else calculate(null,null);
- }
- }
- static void calculate(String path1,String path2){
- if(path1==null&&path2==null) JOptionPane.showMessageDialog(new JFrame(), "用戶終止。","結束",JOptionPane.INFORMATION_MESSAGE);
- else {
- try{ //try程序塊 內 爲文字統計的核心程序,可按需修改。方法calculate()有一箇相關方法EndJZ(),可按需修改。
- BufferedReader Z=new BufferedReader(new InputStreamReader(new FileInputStream(path1),"UTF-16"));
- BufferedWriter Zuozhuan=new BufferedWriter( new OutputStreamWriter(new FileOutputStream(path2),"UTF-16"));
- String s=Z.readLine();
- char a=s.charAt(0);long i;int j=0,k;byte m=-1;
- if (a=='△') { Zuozhuan.write("●");m=0;} //經
- else if (a=='▲') { Zuozhuan.write("■");m=1;} //傳
- for(i=0;s!=null;){
- for(k=0;k<s.length();k++){
- a=s.charAt(k);
- if(a!='△'&&a!='▲'&&a!=' '&&m==-1) {Zuozhuan.write(a);} //標題文字處理
- if(a=='△'&&m==-1) {Zuozhuan.write("\n●");m=0;}
- if(a=='▲'&&m==-1) {Zuozhuan.write("\n■");m=1;}
- else if(a=='△'&&i!=0) {Zuozhuan.write(EndJZ(m)+i+" 重"+j);i=0;j=0;Zuozhuan.write("\n●");m=0;}
- else if(a=='▲'&&i!=0) {Zuozhuan.write(EndJZ(m)+i+" 重"+j);i=0;j=0;Zuozhuan.write("\n■");m=1;}
- else if(m!=-1) {
- if (a=='\u4dc0'||a=='\u4dc1'||a=='\u4dc2'||a=='\u4dc3'||a=='\u4dc4'||a=='\u4dc5'||a=='\u4dc6'||a=='\u4dc7'){j++;Zuozhuan.write(a+"☆"+j);} //排除文字統計中的干擾因素,此下八行語句爲計算六十四卦(重文)出現數目。
- else if(a=='\u4dc8'||a=='\u4dc9'||a=='\u4dca'||a=='\u4dcb'||a=='\u4dcc'||a=='\u4dcd'||a=='\u4dce'||a=='\u4dcf'){j++;Zuozhuan.write(a+"☆"+j);}
- else if(a=='\u4dd0'||a=='\u4dd1'||a=='\u4dd2'||a=='\u4dd3'||a=='\u4dd4'||a=='\u4dd5'||a=='\u4dd6'||a=='\u4dd7'){j++;Zuozhuan.write(a+"☆"+j);}
- else if(a=='\u4dd8'||a=='\u4dd9'||a=='\u4dda'||a=='\u4ddb'||a=='\u4ddc'||a=='\u4ddd'||a=='\u4dde'||a=='\u4ddf'){j++;Zuozhuan.write(a+"☆"+j);}
- else if(a=='\u4de0'||a=='\u4de1'||a=='\u4de2'||a=='\u4de3'||a=='\u4de4'||a=='\u4de5'||a=='\u4de6'||a=='\u4de7'){j++;Zuozhuan.write(a+"☆"+j);}
- else if(a=='\u4de8'||a=='\u4de9'||a=='\u4dea'||a=='\u4deb'||a=='\u4dec'||a=='\u4ded'||a=='\u4dee'||a=='\u4def'){j++;Zuozhuan.write(a+"☆"+j);}
- else if(a=='\u4df0'||a=='\u4df1'||a=='\u4df2'||a=='\u4df3'||a=='\u4df4'||a=='\u4df5'||a=='\u4df6'||a=='\u4df7'){j++;Zuozhuan.write(a+"☆"+j);}
- else if(a=='\u4df8'||a=='\u4df9'||a=='\u4dfa'||a=='\u4dfb'||a=='\u4dfc'||a=='\u4dfd'||a=='\u4dfe'||a=='\u4dff'){j++;Zuozhuan.write(a+"☆"+j);}
- else if(a!=' '&&a!='▲'&&a!='△') {Zuozhuan.write(a);i++;if(i%5==0) Zuozhuan.write(i+"|");}
- }
- }
- s=Z.readLine();
- }
- if(m!=-1) Zuozhuan.write(EndJZ(m)+i+" 重"+j);
- Zuozhuan.close();
- int result=JOptionPane.showConfirmDialog(new JFrame(),"順利完成。\n文件已寫入"+new File(path2).getAbsolutePath()+"。\n繼續下一箇任務?","結果",JOptionPane.YES_NO_OPTION);
- if(result==JOptionPane.YES_OPTION) Input("");
- else JOptionPane.showMessageDialog(new JFrame(), "去看看最終成果吧!","結束",JOptionPane.INFORMATION_MESSAGE);
- }
- catch(IOException e){
- int result=JOptionPane.showConfirmDialog(new JFrame(),"運行錯誤:"+e+"\n重新開始(Y)或結束(N)?","錯誤",JOptionPane.ERROR_MESSAGE);
- if (result==JOptionPane.YES_OPTION) Input("");
- else calculate(null,null);
- }
- }
- System.exit(0);
- }
- static String EndJZ(byte m){ //方法calculate()的相關方法,可按需修改。
- String s;
- if(m==0) s=" ○經文";
- else s=" □傳文";
- return s;
- }
- }
复制代码
[ 本帖最后由 曾伯昧 于 2010-8-12 12:44 编辑 ] |