Path: csiph.com!usenet.pasdenom.info!news.chainon-marquant.org!nntpfeed.proxad.net!proxad.net!feeder1-2.proxad.net!74.125.46.80.MISMATCH!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail From: gearss8888@gmail.com Newsgroups: comp.lang.java.programmer Subject: I develop a Java program to format Java codes Date: Fri, 2 Mar 2012 03:29:41 -0800 (PST) Organization: http://groups.google.com Lines: 409 Message-ID: <5690138.193.1330687781011.JavaMail.geo-discussion-forums@ynca15> NNTP-Posting-Host: 58.248.7.135 Mime-Version: 1.0 Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: quoted-printable X-Trace: posting.google.com 1330691404 17864 127.0.0.1 (2 Mar 2012 12:30:04 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Fri, 2 Mar 2012 12:30:04 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=58.248.7.135; posting-account=K-H6MAoAAACf2uYihr0AgxpxKwbxYLCt User-Agent: G2/1.0 Xref: csiph.com comp.lang.java.programmer:12581 The program can format Java codes, the codes formatted will have correct in= dent spaces. //---------- /* Modified: 2012-3-1 it can format java codes so as to get the correct indent spaces. */ import java.io.IOException;//=D2=FD=C8=EB=C0=E0 import java.io.*; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.StringReader; import java.io.StringWriter; import java.io.FileInputStream; import java.io.FileReader; import java.io.InputStream; import java.io.Reader; import java.util.ArrayList; import javax.swing.JOptionPane; import java.awt.event.*; import java.awt.*; import javax.swing.*; import java.awt.Graphics; import java.awt.Color; import javax.swing.JFileChooser; import javax.swing.SwingConstants; import javax.swing.UIManager; public class Tidy extends JFrame { JButton SelectFilebtn, OKbtn; JTextField FileNameField; String TabBlank =3D " "; // =C3=BF=D2=BB=B4=CEtab=B5=C4=BF=D5=B8=F1= =B4=F3=D0=A1=A3=AC=D5=E2=C0=EF=CE=AA=C4=AC=C8=CF=B5=C4=CB=C4=B8=F6=BF=D5=B8= =F1 int HowManyTab =3D 0; boolean HaveUnCleanRow =3D false; // =BC=C7=C2=BC=D3=D0=C3=BB=D3=D0=B1= =E0=D0=B4=B2=BB=B9=E6=D5=FB=B5=C4=B3=CC=D0=F2=B4=FA=C2=EB=A3=AC=C8=E7=B9=FB= =D3=D0=B5=AF=B3=F6=B6=D4=BB=B0=BF=F2=C7=EB=D3=C3=BB=A7=B8=C4=D5=FD=D4=D9=B9= =D8=B1=D5=BF=D8=D6=C6=CC=A8=A3=AC=C8=E7=B9=FB=C3=BB=D3=D0=A3=AC=B2=BB=CF=D4= =CA=BE=B6=D4=BB=B0=BF=F2=A1=A3 boolean ForWhileIfBlock =3D false; // =B1=EA=D6=BE=D5=E2=D2=BB=D0=D0=CA= =C7=B7=F1for, while or if =BF=AA=CD=B7=B5=AB=C8=B4=C3=BB=D3=D0{}=B7=FB=BA= =C5=A3=AC=D5=E2=CB=B5=C3=F7=D5=E2=B8=F6=BF=E9=D6=BB=D3=D0=D2=BB=D0=D0=A1=A3 public Tidy () { this.setTitle( "=CE=C4=BC=FE=D5=FB=C0=ED=C6=F7"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new GridBagLayout()); GridBagConstraints gbc =3D new GridBagConstraints(); gbc.anchor =3D GridBagConstraints.WEST; //=C9=E8=B6=A8Layout=B5=C4= =CE=BB=D6=C3 gbc.insets =3D new Insets(2,2,2,2); //=C9=E8=B6=A8=D3=EB=B1=DF=BD= =E7=B5=C4=BE=E0=C0=EB(=C9=CF,=D7=F3,=CF=C2,=D3=D2) SelectFilebtn =3D new JButton("=D1=A1=D4=F1=CE=C4=BC=FE"); SelectFilebtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { do_SelectFilebtn_actionPerformed(e); } }); FileNameField =3D new JTextField("",40); gbc.gridy=3D1; gbc.gridx=3D0; this.add(SelectFilebtn, gbc); gbc.gridx=3D1; this.add(FileNameField, gbc); //-------------- OKbtn =3D new JButton("OK"); OKbtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String FileName =3D FileNameField.getText(); do_OKbtn_actionPerformed(e, FileName); } }); gbc.gridy=3D2; gbc.gridx=3D0; this.add(OKbtn, gbc); //--------------------- this.pack(); this.setVisible(true); } =20 protected void do_SelectFilebtn_actionPerformed (ActionEvent e) { JFileChooser chooser =3D new JFileChooser();// =B4=B4=BD=A8=CE=C4= =BC=FE=D1=A1=D4=F1=C6=F7 int option =3D chooser.showOpenDialog(this);// =CF=D4=CA=BE=CE=C4= =BC=FE=B4=F2=BF=AA=B6=D4=BB=B0=BF=F2 if (option =3D=3D JFileChooser.APPROVE_OPTION) {// =C5=D0=B6=CF=D3= =C3=BB=A7=CA=C7=B7=F1=D1=A1=B6=A8=CE=C4=BC=FE File file =3D chooser.getSelectedFile();// =BB=F1=C8=A1=D3=C3= =BB=A7=D1=A1=D4=F1=CE=C4=BC=FE FileNameField.setText(file.getAbsolutePath());// =B0=D1=D1=A1= =D4=F1=B5=C4=CE=C4=BC=FE=C2=B7=BE=B6=CF=D4=CA=BE=D4=DA=CE=C4=B1=BE=BF=F2=D6= =D0 } } =20 protected void do_OKbtn_actionPerformed(ActionEvent e, String ThisFile)= { if (!ThisFile.equals("")) { HowManyTab =3D 0; ReadAndCombFile(ThisFile); // =CE=C4=BC=FE=C3=FB=B2=BB=C4=DC=CE= =AA=BF=D5 } } // =B8=F9=BE=DD{=BA=CD}=B5=C4=B8=F6=CA=FD=BE=F6=B6=A8=C3=BF=D2=BB=D0=D0= =C7=B0=C3=E6=D0=E8=D2=AA=CC=ED=BC=D3=B6=E0=C9=D9=B8=F6tab=BF=D5=B8=F1 String FileInManyLines (String oneline, int CombRow, String Suffix) { String PreffixStr; // =D5=E2=CA=C7=C3=BF=D2=BB=D0=D0=BF=AA=CA=BC=B5= =C4=BF=D5=B8=F1=A3=AC=CB=FC=CA=C7=D3=C3=C0=B4=B7=BD=B1=E3=D4=C4=B6=C1=B5=C4 String TrimIt =3D oneline.trim(); String newoneline =3D ""; int Diff =3D 0; // Java=B3=CC=D0=F2 if (Suffix.equals(".java")) { int Conutleft =3D strFind(TrimIt, "{", 0); int ConutRight =3D strFind(TrimIt, "}", 0); Diff =3D Conutleft - ConutRight; // =C8=E7=B9=FB=C7=B0=C3=E6=D2=BB=D0=D0=D6=BB=D3=D0=D2=BB=B8=F6= for, while or if=B5=AB=C3=BB=D3=D0{}=A3=AC=CB=F9=D2=D4=CF=C2=C3=E6=D2=BB=D0= =D0=BE=CD=CB=F5=BD=F8=C1=CB if ((Conutleft =3D=3D 0) && (ConutRight =3D=3D 0) && ForWhileIf= Block) Diff =3D 50; // for, while or if =BF=AA=CD=B7=A3=AC=B5=AB=CA=C7=C8=B4=C3=BB= =D3=D0=CA=B9=D3=C3{}=A3=AC=CB=B5=C3=F7=D5=E2=B8=F6=BF=E9=D6=BB=D3=D0=D2=BB= =D0=D0=A1=A3 if ((Conutleft =3D=3D 0) && (ConutRight =3D=3D 0) && ((TrimIt.s= tartsWith("for")) || (TrimIt.startsWith("while")) || (TrimIt.startsWith("if= ")) || (TrimIt.startsWith("else")) || (TrimIt.startsWith("else if")))) { ForWhileIfBlock =3D true; Diff=3D 100; } switch (Diff) { case 1 : { PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); HowManyTab =3D HowManyTab + 1; newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 break; } case -1 : { HowManyTab =3D HowManyTab - 1; PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 break; } case 0 : { PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 break; } case 50 :{ PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 HowManyTab =3D HowManyTab - 1; ForWhileIfBlock =3D false; break; } case 100 : { PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 HowManyTab =3D HowManyTab + 1; break; } default: { PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 System.out.println("=B5=DA"+CombRow+"=D0=D0"+"=B1=E0=D0= =B4=B2=BB=B9=E6=D5=FB=A3=AC=C7=EB=B8=C4=D5=FD!"); HaveUnCleanRow =3D true; // =B3=CC=D0=F2=D7=EE=BA=F3=B5= =AF=B3=F6=B6=D4=BB=B0=BF=F2=CC=E1=D0=D1=D3=C3=BB=A7=D5=E2=B8=F6=B3=CC=D0=F2= =D3=D0=B1=E0=D0=B4=B2=BB=B9=E6=D5=FB=B5=C4=B4=FA=C2=EB=A1=A3 } } } else if (Suffix.equals(".f90") || Suffix.equals(".f95")) { /= / Fortran=B3=CC=D0=F2 String LowCaseTrimIt =3D TrimIt.toLowerCase(); if (LowCaseTrimIt.startsWith("program") || LowCaseTrimIt.starts= With("module") || LowCaseTrimIt.startsWith("subroutine") || ((strFind(LowCa= seTrimIt, "function", 0) =3D=3D 1)) || LowCaseTrimIt.startsWith("do ") || (= LowCaseTrimIt.startsWith("if") && (LowCaseTrimIt.endsWith("then"))) || LowC= aseTrimIt.startsWith("select") || LowCaseTrimIt.startsWith("case")) { Diff =3D 1; } else if (LowCaseTrimIt.startsWith("end ") || LowCaseTrimIt.star= tsWith("enddo") || LowCaseTrimIt.startsWith("endif")) { Diff =3D 2; } else if (LowCaseTrimIt.startsWith("else")) { Diff =3D 3; } else {Diff =3D 100;} switch (Diff) { case 1 : { PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); HowManyTab =3D HowManyTab + 1; newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 break; } case 2 : { HowManyTab =3D HowManyTab - 1; PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 break; } case 3 : { HowManyTab =3D HowManyTab - 1; PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 HowManyTab =3D HowManyTab + 1; break; } case 100 : { PreffixStr =3D ManyTabStr (HowManyTab, TabBlank); newoneline =3D PreffixStr + TrimIt; // =B0=D1=C7=B0=D7= =BA=BF=D5=B8=F1=CC=ED=BC=D3=B5=BD=D5=E2=D2=BB=D0=D0=C7=B0=C3=E6 break; } } } else {// =C6=E4=CB=FB=B8=F1=CA=BD=B5=C4=CE=C4=BC=FE newoneline =3D oneline; } return newoneline; } // =C9=FA=B3=C9=D2=BB=B8=F6n=B8=F6tab=BF=D5=B8=F1=B5=C4=BF=D5=B0=D7=D7= =D6=B7=FB=B4=AE String ManyTabStr (int howmany, String TabBlank) { String Str =3D ""; for (int i =3D 0; i < howmany; i++) Str =3D Str + TabBlank; return Str; } // =B7=BD=B7=A8strFind=D3=C3=D3=DA=CA=B5=CF=D6=D7=D6=B7=FB=B4=AE=B2=E9= =D5=D2=A3=AC=B7=B5=BB=D8=C6=A5=C5=E4=B5=C4=B4=CE=CA=FD public int strFind(String s1, String s2, int pos) { // =B1=E4=C1=BFi=BA=CDj=B7=D6=B1=F0=B1=ED=CA=BE=D6=F7=B4=AE=BA=CD= =C4=A3=CA=BD=B4=AE=D6=D0=B5=B1=C7=B0=D7=D6=B7=FB=B4=AE=B5=C4=CE=BB=D6=C3=A3= =ACk=B1=ED=CA=BE=C6=A5=C5=E4=B4=CE=CA=FD int i, j, k =3D 0; // pos=B4=FA=B1=ED=D6=F7=B4=AE=D6=D0=BF=AA=CA=BC=B1=C8=BD=CF=B5=C4= =CE=BB=D6=C3 // i=3Dpos; i =3D 0;// =C8=E7=B9=FB=B0=D1i=3Dpos=B8=C4=B3=C9=B4=CB=BE=E4=BD=AB= =B2=BB=B4=D3=CA=F3=B1=EA=CE=BB=D6=C3=BF=AA=CA=BC=D5=D2=A3=AC=B6=F8=CA=C7=D6= =B1=BD=D3=B4=D3=D7=D6=B7=FB=B4=AE=CD=B7=BF=AA=CA=BC=D5=D2=A3=ACi=BE=F6=B6= =A8=D7=C5=BF=AA=C8=E7=B2=E9=D5=D2=B5=C4=CE=BB=D6=C3 j =3D 0; while (i < s1.length() && j < s2.length()) { if (s1.charAt(i) =3D=3D s2.charAt(j)) { ++i; ++j; if (j =3D=3D s2.length()) { // j=3Ds2.length()=B1=ED=CA=BE=D7=D6=B7=FB=B4=AE=C6=A5= =C5=E4=B3=C9=B9=A6=A3=AC=C6=A5=C5=E4=B3=C9=B9=A6=B4=CE=CA=FD=BC=D31 k =3D k + 1; // =BD=AB=D6=B8=CA=BE=D6=F7=B4=AE=BA=CD=C4=A3=CA=BD=D6= =D0=B5=B1=C7=B0=D7=D6=B7=FB=B5=C4=B1=E4=C1=BFi=BA=CDj=BD=F8=D0=D0=BB=D8=CD= =CB i =3D i - j + 1; j =3D 0; } else { i =3D i - j + 1; j =3D 0; } } i++; } return k;// =CE=AA=CA=B2=C3=B4=D5=E2=B8=F6while=D1=AD=BB=B7=C3=BB= =D3=D0=D2=BB=B8=F6=D1=AD=BB=B7=BF=D8=D6=C6=C6=F7=C4=D8=A3=AC=CE=D2=BB=B9=C3= =BB=D3=D0=C0=ED=BD=E2=CB=FC=B5=C4=BD=E1=B9=B9=A3=BF } =20 //=D2=D4=D0=D0=CE=AA=B5=A5=CE=BB=B6=C1=C8=A1=CE=C4=BC=FE String[] readFileByLines (String fileName){ File file =3D new File(fileName); ArrayList alllinks =3D new ArrayList(); BufferedReader reader =3D null;//=B4=B4=BD=A8=BB=BA=B4=E6=B6=C1=C8= =A1 try { reader =3D new BufferedReader(new FileReader(file));//=BD=AB=CE= =C4=BC=FE=B7=C5=D4=DA=BB=BA=B4=E6=B6=C1=C8=A1=D6=D0 String tempString =3D null; //=D2=BB=B4=CE=B6=C1=C8=EB=D2=BB=D0=D0=A3=AC=D6=B1=B5=BD=B6=C1= =C8=EBnull=CE=AA=CE=C4=BC=FE=BD=E1=CA=F8 while ((tempString =3D reader.readLine()) !=3D null){ alllinks.add(tempString); } reader.close(); } catch (IOException e) {//=B2=B6=BB=F1=D2=EC=B3=A3 e.printStackTrace(); } finally {//=C4=DA=C8=DD=D7=DC=D6=B4=D0=D0 if (reader !=3D null) { try { reader.close();//=B9=D8=B1=D5=BB=BA=B4=E6=B6=C1=C8=A1 } catch (IOException e1) { } } } String[] links =3D new String[alllinks.size()]; for (int count =3D 0; count < alllinks.size(); count++) {links[coun= t] =3D alllinks.get(count);} return links; } =20 // =B0=D1=D7=D6=B7=FB=B4=AE=CA=FD=D7=E9=D0=B4=C8=EB=CE=C4=BC=FE, =BC=B4= =B0=B4=D0=D0=D0=B4=C8=EB=CE=C4=BC=FE public boolean stringArrayToFile(String[] arrayres, String filePath) { boolean flag =3D true; BufferedReader bufferedReader =3D null; BufferedWriter bufferedWriter =3D null; StringBuffer temp =3D new StringBuffer(); for (String one : arrayres) { temp.append(one); temp.append("\n"); } int x =3D temp.lastIndexOf("\n"); temp.replace(x, temp.length(), ""); String res =3D temp.toString(); try { File distFile =3D new File(filePath); //=B4=B4=BD=A8=CE=C4= =BC=FE if (!distFile.getParentFile().exists()) //=C5=D0=B6=CF=B8= =B8=C2=B7=BE=B6=CA=C7=CE=C4=BC=FE=BC=D0=CA=C7=B7=F1=B4=E6=D4=DA distFile.getParentFile().mkdirs(); //=BF=C9=D2=D4=D4=DA= =B2=BB=B4=E6=D4=DA=B5=C4=C4=BF=C2=BC=D6=D0=B4=B4=BD=A8=CE=C4=BC=FE=BC=D0 bufferedReader =3D new BufferedReader( new StringReader(res)); //=BD=AB=D4=AD=D7=D6=B7=FB=B4=AE= =B6=C1=C8=EB=BB=BA=B3=E5 bufferedWriter =3D new BufferedWriter( new FileWriter(distFile)); //=BD=AB=CE=C4=BC=FE=D0=B4=C8= =EB=BB=BA=B3=E5 char buf[] =3D new char[1024]; // =D7=D6=B7=FB=BB=BA=B3= =E5=C7=F8 int len; while ((len =3D bufferedReader.read(buf)) !=3D -1) { //while= =D1=AD=BB=B7 bufferedWriter.write(buf, 0, len); //=BD=AB=D7=D6=B7=FB= =B4=AE=D0=B4=C8=EB=CE=C4=BC=FE } bufferedWriter.flush(); //=CB=A2=D0=C2=D0=B4=C8=EB=C1= =F7=B5=C4=BB=BA=B3=E5 bufferedReader.close(); //=B9=D8=B1=D5=B6=C1=B3=F6=C1= =F7 bufferedWriter.close(); //=B9=D8=B1=D5=D0=B4=C8=EB=C1= =F7 } catch (IOException e) { //=B2=B6=BB=F1=D2=EC=B3=A3 e.printStackTrace(); flag =3D false; return flag; } finally { //finally=B7=BD=B7=A8=D7=DC=B1=BB=D6=B4= =D0=D0 if (bufferedReader !=3D null) { //=C5=D0=B6=CF=B6=C1=B3= =F6=C1=F7=CA=C7=B7=F1=CE=AA=BF=D5 try { bufferedReader.close(); //=C8=B7=B1=A3=B6=C1=B3= =F6=C1=F7=B9=D8=B1=D5 } catch (IOException e) { e.printStackTrace(); } } } return flag; //=B7=B5=BB=D8=B2=BC=B6=FB=C0=E0=D0=CD } =20 void ReadAndCombFile (String filename) { String[] FileDivideToManyLines =3D readFileByLines (filename); // =BB=F1=C8=A1=CE=C4=BC=FE=B5=C4=BA=F3=D7=BA=C3=FB int FileSuffixLoc =3D filename.lastIndexOf("."); String FileSuffix =3D filename.substring(FileSuffixLoc, filename.le= ngth()); ArrayList FileCombed =3D new ArrayList (); // =B4= =A2=B4=E6=BC=D3=C8=EB=BA=CF=CA=CA=C7=B0=C3=E6=BF=D5=D0=D0=B5=C4=D0=C2=B5=C4= =D2=BB=D0=D0=D7=D6=B7=FB int RowNumber =3D 1; // =BC=C7=C2=BC=CF=D6=D4=DA=B4=A6=C0=ED=B5=DA= =BC=B8=D0=D0=B5=C4=B4=FA=C2=EB=A3=AC=CA=B9=D3=C3=D5=E2=B8=F6=D0=D0=CA=FD=CC= =E1=D0=D1=BF=AA=B7=A2=D5=DF=C4=C4=C0=EF=B3=F6=B4=ED=C1=CB for (String oneline : FileDivideToManyLines) { String newLine =3D FileInManyLines (oneline, RowNumber, FileSuf= fix); FileCombed.add(newLine); RowNumber =3D RowNumber + 1; } String[] FileCombInStr =3D new String[FileCombed.size()]; for (int count =3D 0; count < FileCombed.size(); count ++) {FileCom= bInStr [count] =3D FileCombed.get(count);} stringArrayToFile (FileCombInStr, filename); if (HaveUnCleanRow) {JOptionPane.showMessageDialog(null, "=D3=D0=B2= =BB=B9=E6=D5=FB=B5=C4=B4=FA=C2=EB=A3=AC=C7=EB=B8=C4=D5=FD=A1=A3");} } =20 public static void main(String[] args) { Tidy TideFiles =3D new Tidy(); } }