//以下是我做的Java 文件的缩进排版,算法有缺点.但能用, //不管怎么说,排java文件时比UltralEdit的排版强。 import java.io.File; import java.io.PrintStream; import java.util.ArrayList; import lang9.Str9; import lang9.out; import util9.Load9; class DentJavaCode { public static boolean dent(File file, File file1) { String as[] = new String[1]; if(file == null !file.exists()) { return false; } else { as = Load9.copy(file, as); ArrayList arraylist = new ArrayList(); dent(as, arraylist, 0); as = (String[])arraylist.toArray(as); out.b("s.len=" + as.length); Load9.copy(as, file1); return true; } } public static int dent(ArrayList arraylist, ArrayList arraylist1, int i) { if(arraylist == null && arraylist.size() == 0) { System.out.println("dent frm list1,but list1 isnull"); return i; } if(arraylist1 == null) { System.out.println("dent to list2,but list2 is null"); return i; } else { String as[] = new String[1]; as = (String[])arraylist.toArray(as); return dent(as, arraylist1, i); } } public static String[] dent(String as[], String as1[], int i) { ArrayList arraylist = new ArrayList(); dent(as, arraylist, i); if(as1 == null) as1 = new String[1]; return (String[])arraylist.toArray(as1); } public static int dent(String as[], ArrayList arraylist, int i) { int j = as.length; boolean flag = false; if(as == null as.length == 0) { System.out.println("dent from s[],but s[] is null"); return i; } if(arraylist == null) { System.out.println("dent to list,but list is null"); return i; } for(int l = 0; l < as.length; l++) { if(as[l] == null) continue; as[l] = as[l].trim(); int k = as[l].length(); if(k == 0) continue; int i1 = Str9.indexOf_outQuotes(special, as[l]); if(i1 < 0) { if(flag) arraylist.add(space(2) + as[l]); else arraylist.add(space(i) + as[l]); continue; } String s = as[l].substring(i1); if(s.indexOf("{") == 0) s = "{"; else if(s.indexOf("}") == 0) s = "}"; else if(s.indexOf("//") == 0) s = "//"; else if(s.indexOf("*/") == 0) s = "*/"; else if(s.indexOf("/*") == 0) s = "/*"; if(s.equals("//")) { if(i1 > 0) { arraylist.add(space(i) + as[l].substring(0, i1)); arraylist.add(space(i) + as[l].substring(i1)); } else { arraylist.add(space(i) + as[l]); } continue; } if(s.equals("*/")) { flag = false; if(i1 > 0) arraylist.add(space(2) + as[l].substring(0, i1)); arraylist.add("*/"); i1 += 2; if(k > i1) { as[l] = as[l].substring(i1); l--; } continue; } if(s.equals("/*")) { flag = true; if(i1 > 0) { arraylist.add(space(i) + as[l].substring(0, i1)); as[l] = as[l].substring(i1); } if((i1 = Str9.indexOf_outQuotes("*/", as[l], i1 + 2)) != -1) { flag = false; i1 += 2; arraylist.add(as[l].substring(0, i1)); if(as[l].length() > i1) { as[l] = as[l].substring(i1); l--; } continue; } if(as[l].length() <= 0) continue; arraylist.add("/*"); as[l] = as[l].substring(2); if(as[l].length() > 0) arraylist.add(space(2) + as[l]); continue; } if(s.equals("{")) { i1++; if(as[l].indexOf("//") == i1) { arraylist.add(space(i) + as[l]); i += increment; continue; } arraylist.add(space(i) + as[l].substring(0, i1)); i += increment; if(k > i1) { as[l] = as[l].substring(i1); l--; } continue; } if(s.equals("}")) { arraylist.add(space(i) + as[l].substring(0, i1)); i -= increment; i1++; if(k > i1 && as[l].charAt(i1) == ';') { arraylist.add(space(i) + "};"); i1++; if(k > i1) { as[l] = as[l].substring(i1); l--; } continue; } if(as[l].indexOf("}//") == 0) { System.out.println("2s[i]=" + as[l] + ",indent=" + i); arraylist.add(space(i) + as[l]); continue; } arraylist.add(space(i) + "}"); if(k > i1) { as[l] = as[l].substring(i1); l--; } } else { arraylist.add(space(i) + as[l]); } } return i; } static String space(int i) { return Str9.repeat(' ', i); } public DentJavaCode(File file) { String as[] = null; as = Load9.copy(file, as); ArrayList arraylist = new ArrayList(); dent(as, arraylist, 0); String s = file.getName(); int i = 0; boolean flag = false; File file1; file1 = file1 = new File(s + "dent0"); i = 1; do { if(i >= 5) break; file1 = new File(s + "dent" + i); if(!file1.exists()) break; i++; } while(true); if(file1.exists()) file1.delete(); if(file.renameTo(file1)) { String as1[] = (String[])arraylist.toArray(as); Load9.copy(as1, file); System.out.println("ok"); } else { System.out.println("rename:false"); } } public static void main(String args[]) { String args1[] = new String[1]; File file = new File(args[0]); args1 = Load9.copy(file, args1); ArrayList arraylist = new ArrayList(); dent(args1, arraylist, 0); File file1 = new File(args[0] + "dent0"); int i = 1; do { if(i >= 5) break; file1 = new File(args[0] + "dent" + i); if(!file1.exists()) break; i++; } while(true); if(file1.exists()) file1.delete(); String args2[] = (String[])arraylist.toArray(args1); if(file.renameTo(file1)) { Load9.copy(args2, file); System.out.println("ok"); } else { System.out.println("rename:false"); } } static int increment = 3; public static String special[] = { "{", "}", "//", "/*", "*/" }; }
|