java格式化代码(java格式化代码工具类)
时间:2019-06-18
本文章向大家介绍java格式化代码(java格式化代码工具类),主要包括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,"\n",""); dataTmp = repalceHHF(dataTmp,"{","{\n"); dataTmp = repalceHHF(dataTmp,"}","}\n"); dataTmp = repalceHHF(dataTmp,"/*","\n/*\n"); dataTmp = repalceHHF(dataTmp,"* @","\n* @"); dataTmp = repalceHHF(dataTmp,"*/","\n*/\n"); dataTmp = repalceHHF(dataTmp,";",";\n"); dataTmp = repalceHHF(dataTmp,"//","\n//"); dataTmp = repalceHHFX(dataTmp,"\n"); 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 && "\n".equals(a)){ result.append("\n"); } } } 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+"\n")); kg = ""; }else{ kg = kg + zbf; result.append(kg+tem+"\n"); } stack.push(kg); }else if(tem.indexOf("}")!=-1){ String kg = getStack(stack,true); if(kg == null){ result.append(tem+"\n"); }else{ result.append(kg+tem+"\n"); } }else{ String kg = getStack(stack,false); if(kg == null){ result.append(tem+"\n"); }else{ result.append(kg+zbf+tem+"\n"); } } } } 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; } }
原文地址:https://www.cnblogs.com/xuexidememeda/p/11045156.html
- wpf 控件大小随窗体大小改变而改变
- 零基础学编程036:快速编写一个GUI程序
- WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法
- 零基础学编程041:欧拉公式的几何意义
- 零基础学编程040:在Windows上安装Python库的正确姿势
- c++/c 获取cpp文件行号跟文件名
- 零基础学编程042:画函数图像
- C-SATS工程副总裁教你如何用TensorFlow分类图像 part2
- C++11 Lambda表达汇总总结
- TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
- C++虚析构函数解析
- C-SATS工程副总裁教你如何用TensorFlow分类图像 part1
- 帝国cms文章页调用当前文章URL如何操作?
- dedecms文章页调用地址(当前文章URL)如何操作?
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释