• java格式化代码(java格式化代码工具类)


    下别人的原来链接..... 支持效果不好要想格式化好需要解析语法树   7个积分我这里免费下      转自 https://download.csdn.net/download/jkl012789/10803755?utm_source=bbsseo

    package com.yw.util;
    
    
    import java.util.EmptyStackException;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Stack;
    import java.util.UUID;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class JavaForm {
    
    
        public static void main(String[] args) {
            String str = "/*** @说明 : 可任意添加方法,类,引入包路径*/public class Test {    /**    * @说明 :输出结果    */    public static void main(String[] args) {        System.out.println("hello world");    }}";
            str = formJava(str);
            System.out.println(str);
        }
        
    
        /**
         * @说明 :格式化java代码 
         * @参数 :@param dataTmp
         * @参数 :@return
         * @返回 :String
         * @作者 :WangXL
         * @时间 :2018 11 22
         **/
        public static String formJava(String data) {
            String dataTmp = replaceStrToUUid(data,""");
            dataTmp = replaceStrToUUid(dataTmp,"'");
            dataTmp = repalceHHF(dataTmp,"
    ","");
            dataTmp = repalceHHF(dataTmp,"{","{
    ");
            dataTmp = repalceHHF(dataTmp,"}","}
    ");
            dataTmp = repalceHHF(dataTmp,"/*","
    /*
    ");
            dataTmp = repalceHHF(dataTmp,"* @","
    * @");
            dataTmp = repalceHHF(dataTmp,"*/","
    */
    ");
            dataTmp = repalceHHF(dataTmp,";",";
    ");
            dataTmp = repalceHHF(dataTmp,"//","
    //");
            dataTmp = repalceHHFX(dataTmp,"
    ");
            for(Map.Entry<String, String> r : mapZY.entrySet()){
                dataTmp = dataTmp.replace(r.getKey(),r.getValue());
            }
            if(dataTmp==null)
                return data;
            return dataTmp;
        }
        
        public static Map<String,String> mapZY = new HashMap<String,String>();
        /**
         * @说明 : 循环替换指定字符为随机uuid  并将uui存入全局map:mapZY   
         * @参数 :@param string   字符串
         * @参数 :@param type    指定字符
         * @作者 :WangXL
         * @时间 :2018 11 23
         **/
        public static String replaceStrToUUid(String string,String type){
            Matcher slashMatcher = Pattern.compile(type).matcher(string);
            boolean bool = false;
            StringBuilder sb = new StringBuilder();
            int indexHome = -1; //开始截取下标
            while(slashMatcher.find()) {
               int indexEnd = slashMatcher.start();
               String tmp = string.substring(indexHome+1,indexEnd); //获取"号前面的数据
               if(indexHome == -1 ||bool == false){
                   sb.append(tmp);
                   bool = true;
                   indexHome = indexEnd;
               }else{
                   if(bool){
                       String tem2 = "";
                       for( int i=indexEnd-1 ; i>-1 ; i-- ){
                               char c = string.charAt(i);
                               if(c == '\'){
                                   tem2 += c;
                               }else{
                                   break;
                               }
                           }
                       int tem2Len = tem2.length();
                           if(tem2Len>-1){
                               //结束符前有斜杠转义符 需要判断转义个数奇偶   奇数是转义了  偶数才算是结束符号   
                               if(tem2Len % 2==1){ 
                                   //奇数 非结束符
                               }else{
                                   //偶数才算是结束符号
                                  String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
                                  uuid = type+uuid+type;
                                  mapZY.put(uuid, type+tmp+type);
                                  sb.append(uuid);
                                  bool = false;
                                  indexHome = indexEnd;
                               }
                           }
                   }
               }
            }
            sb.append(string.substring(indexHome+1,string.length()));
            return sb.toString();
         }
        
        
        
        //处理换行
        public static String repalceHHF(String data,String a,String b){
            try{
                data = data.replace(a, "$<<yunwangA>>$<<yunwangB>>");
                String  arr[] = data.split("$<<yunwangA>>");
                StringBuilder result = new StringBuilder();
                if(arr != null){
                    for(int i=0;i<arr.length;i++){
                        String t = arr[i];
                        result.append(t.trim());
                        if(t.indexOf("//")!=-1 && "
    ".equals(a)){
                            result.append("
    ");
                        }
                    }
                }
                String res = result.toString();
                res = res.replace("$<<yunwangB>>", b);
                res = res.replace("$<<yunwangA>>", "");
                return res;
            }catch(Exception e){
            }
            return null;
        }
        
        //处理缩进
        public static String repalceHHFX(String data,String a){
            try{
                String  arr[] = data.split(a);
                StringBuilder result = new StringBuilder();
                if(arr != null){
                    String zbf = "    ";
                    Stack<String> stack = new Stack<String>();
                    for(int i=0;i<arr.length;i++){
                        String tem = arr[i].trim();
                        if(tem.indexOf("{")!=-1){
                            String kg = getStack(stack,false);
                            if(kg == null){
                                result.append((tem+"
    "));
                                kg = "";
                            }else{
                                kg = kg + zbf;
                                result.append(kg+tem+"
    ");    
                            }
                            stack.push(kg);
                        }else if(tem.indexOf("}")!=-1){
                            String kg = getStack(stack,true);
                            if(kg == null){
                                result.append(tem+"
    ");
                            }else{
                                result.append(kg+tem+"
    ");
                            }
                        }else{
                            String kg = getStack(stack,false);
                            if(kg == null){
                                result.append(tem+"
    ");
                            }else{
                                result.append(kg+zbf+tem+"
    ");
                            }
                        }
                    }
                }
                String res = result.toString();
                return res;
            }catch(Exception e){}
            return null;
        }
        
        /**
         * @说明 : 获得栈数据
         * @参数 :@param stack 
         * @参数 :@param bool true 弹出  false 获取
         * @时间 :2018 11 22
         **/
        public static String getStack(Stack<String> stack,boolean bool){
            String result = null;
            try{
                if(bool){
                    return stack.pop();
                }
                return stack.peek();
            }catch(EmptyStackException  e){
            }
            return result;
        }
        
    }
  • 相关阅读:
    Pro ASP.NET Core MVC2
    vscode
    git命令使用
    单行函数
    过滤和排序
    oracle基本查询
    斐波那契数列的递归实现
    队列的顺序存储结构
    队列的链式存储结构
    折半查找法
  • 原文地址:https://www.cnblogs.com/xuexidememeda/p/11045156.html
Copyright © 2020-2023  润新知