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

  1. package com.yw.util;
  2.  
  3. import java.util.EmptyStackException;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import java.util.Stack;
  7. import java.util.UUID;
  8. import java.util.regex.Matcher;
  9. import java.util.regex.Pattern;
  10.  
  11. public class JavaForm {
  12.  
  13. public static void main(String[] args) {
  14. String str = "/*** @说明 : 可任意添加方法,类,引入包路径*/public class Test { /** * @说明 :输出结果 */ public static void main(String[] args) { System.out.println(\"hello world\"); }}";
  15. str = formJava(str);
  16. System.out.println(str);
  17. }
  18.  
  19. /**
  20. * @说明 :格式化java代码
  21. * @参数 :@param dataTmp
  22. * @参数 :@return
  23. * @返回 :String
  24. * @作者 :WangXL
  25. * @时间 :2018 11 22
  26. **/
  27. public static String formJava(String data) {
  28. String dataTmp = replaceStrToUUid(data,"\"");
  29. dataTmp = replaceStrToUUid(dataTmp,"'");
  30. dataTmp = repalceHHF(dataTmp,"\n","");
  31. dataTmp = repalceHHF(dataTmp,"{","{\n");
  32. dataTmp = repalceHHF(dataTmp,"}","}\n");
  33. dataTmp = repalceHHF(dataTmp,"/*","\n/*\n");
  34. dataTmp = repalceHHF(dataTmp,"* @","\n* @");
  35. dataTmp = repalceHHF(dataTmp,"*/","\n*/\n");
  36. dataTmp = repalceHHF(dataTmp,";",";\n");
  37. dataTmp = repalceHHF(dataTmp,"//","\n//");
  38. dataTmp = repalceHHFX(dataTmp,"\n");
  39. for(Map.Entry<String, String> r : mapZY.entrySet()){
  40. dataTmp = dataTmp.replace(r.getKey(),r.getValue());
  41. }
  42. if(dataTmp==null)
  43. return data;
  44. return dataTmp;
  45. }
  46.  
  47. public static Map<String,String> mapZY = new HashMap<String,String>();
  48. /**
  49. * @说明 : 循环替换指定字符为随机uuid 并将uui存入全局map:mapZY
  50. * @参数 :@param string 字符串
  51. * @参数 :@param type 指定字符
  52. * @作者 :WangXL
  53. * @时间 :2018 11 23
  54. **/
  55. public static String replaceStrToUUid(String string,String type){
  56. Matcher slashMatcher = Pattern.compile(type).matcher(string);
  57. boolean bool = false;
  58. StringBuilder sb = new StringBuilder();
  59. int indexHome = -; //开始截取下标
  60. while(slashMatcher.find()) {
  61. int indexEnd = slashMatcher.start();
  62. String tmp = string.substring(indexHome+,indexEnd); //获取"号前面的数据
  63. if(indexHome == - ||bool == false){
  64. sb.append(tmp);
  65. bool = true;
  66. indexHome = indexEnd;
  67. }else{
  68. if(bool){
  69. String tem2 = "";
  70. for( int i=indexEnd- ; i>- ; i-- ){
  71. char c = string.charAt(i);
  72. if(c == '\\'){
  73. tem2 += c;
  74. }else{
  75. break;
  76. }
  77. }
  78. int tem2Len = tem2.length();
  79. if(tem2Len>-){
  80. //结束符前有斜杠转义符 需要判断转义个数奇偶 奇数是转义了 偶数才算是结束符号
  81. if(tem2Len % ==){
  82. //奇数 非结束符
  83. }else{
  84. //偶数才算是结束符号
  85. String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
  86. uuid = type+uuid+type;
  87. mapZY.put(uuid, type+tmp+type);
  88. sb.append(uuid);
  89. bool = false;
  90. indexHome = indexEnd;
  91. }
  92. }
  93. }
  94. }
  95. }
  96. sb.append(string.substring(indexHome+,string.length()));
  97. return sb.toString();
  98. }
  99.  
  100. //处理换行
  101. public static String repalceHHF(String data,String a,String b){
  102. try{
  103. data = data.replace(a, "$<<yunwangA>>$<<yunwangB>>");
  104. String arr[] = data.split("$<<yunwangA>>");
  105. StringBuilder result = new StringBuilder();
  106. if(arr != null){
  107. for(int i=;i<arr.length;i++){
  108. String t = arr[i];
  109. result.append(t.trim());
  110. if(t.indexOf("//")!=- && "\n".equals(a)){
  111. result.append("\n");
  112. }
  113. }
  114. }
  115. String res = result.toString();
  116. res = res.replace("$<<yunwangB>>", b);
  117. res = res.replace("$<<yunwangA>>", "");
  118. return res;
  119. }catch(Exception e){
  120. }
  121. return null;
  122. }
  123.  
  124. //处理缩进
  125. public static String repalceHHFX(String data,String a){
  126. try{
  127. String arr[] = data.split(a);
  128. StringBuilder result = new StringBuilder();
  129. if(arr != null){
  130. String zbf = " ";
  131. Stack<String> stack = new Stack<String>();
  132. for(int i=;i<arr.length;i++){
  133. String tem = arr[i].trim();
  134. if(tem.indexOf("{")!=-){
  135. String kg = getStack(stack,false);
  136. if(kg == null){
  137. result.append((tem+"\n"));
  138. kg = "";
  139. }else{
  140. kg = kg + zbf;
  141. result.append(kg+tem+"\n");
  142. }
  143. stack.push(kg);
  144. }else if(tem.indexOf("}")!=-){
  145. String kg = getStack(stack,true);
  146. if(kg == null){
  147. result.append(tem+"\n");
  148. }else{
  149. result.append(kg+tem+"\n");
  150. }
  151. }else{
  152. String kg = getStack(stack,false);
  153. if(kg == null){
  154. result.append(tem+"\n");
  155. }else{
  156. result.append(kg+zbf+tem+"\n");
  157. }
  158. }
  159. }
  160. }
  161. String res = result.toString();
  162. return res;
  163. }catch(Exception e){}
  164. return null;
  165. }
  166.  
  167. /**
  168. * @说明 : 获得栈数据
  169. * @参数 :@param stack
  170. * @参数 :@param bool true 弹出 false 获取
  171. * @时间 :2018 11 22
  172. **/
  173. public static String getStack(Stack<String> stack,boolean bool){
  174. String result = null;
  175. try{
  176. if(bool){
  177. return stack.pop();
  178. }
  179. return stack.peek();
  180. }catch(EmptyStackException e){
  181. }
  182. return result;
  183. }
  184.  
  185. }

java格式化代码(java格式化代码工具类)的更多相关文章

  1. java代码行数统计工具类

    package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...

  2. Java判断不为空的工具类总结

    1.Java判断是否为空的工具类,可以直接使用.包含,String字符串,数组,集合等等. package com.bie.util; import java.util.Collection; imp ...

  3. Java字符串转16 进制工具类Hex.java

    Java字符串转16 进制工具类Hex.java 学习了:https://blog.csdn.net/jia635/article/details/56678086 package com.strin ...

  4. Java中的AES加解密工具类:AESUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...

  5. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  6. java.util.Arrays----操作数组的工具类

    java.util.Arrays操作数组的工具类,里面定义了很多操作数组的方法 1.boolean equals(int[] a,int[] b):判断两个数组是否相等. 2.String toStr ...

  7. 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API

    ---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...

  8. Java数组操作利器:Arrays工具类

    java.util.Arrays提供大量的工具方法来操作数组,这些方法全是静态方法. 1 便捷创建List public static <T> List<T> asList(T ...

  9. Java核心知识点学习----线程同步工具类,CyclicBarrier学习

    线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. 1 ...

  10. java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。

    //------------------------------------------------我是代码的分割线 // 首选是一个工具类,在该工具类里面,定义了一个方法,public void s ...

随机推荐

  1. 无线渗透之ettercap

    无线渗透之ettercap ettercap命令查看 # ettercap -h Usage: ettercap [OPTIONS] [TARGET1] [TARGET2] TARGET is in ...

  2. 夯实Java基础系列目录

    自进入大学以来,学习的编程语言从最初的C语言.C++,到后来的Java,. NET.而在学习编程语言的同时也逐渐决定了以后自己要学习的是哪一门语言(Java).到现在为止,学习Java语言也有很长一段 ...

  3. Linux命令:iostat命令

    Linux系统中的 iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况.同 ...

  4. 莫烦 - Pytorch学习笔记 [ 一 ]

    1. Numpy VS Torch #相互转换 np_data = torch_data.numpy() torch_data = torch.from_numpy(np_data) #abs dat ...

  5. IDEA工具java开发之 高级功能分屏是可以多次使用的 日志连接及浏览器 本地修改历 多列操作 查看方法调用情况

    ◆tabs分屏和独立 分屏是可以多次使用的  ◆日志连接及浏览器  ◆本地修改历史  ◆查看方法调用情况 ◆多列操作 可以同时删除也可以同时替换文字 Ctrl + shift + 右,选中一个词

  6. PE之RVA转FOA

    目录 公式 实验-对齐大小一样 获取ImageBase 计算RVA 获取内存对齐和文件对齐 判断在哪一个节 计算偏移 获取节表的PointerToRawData 计算FOA 验证 实验-对齐大小不一样 ...

  7. 对iOS开发的一些认识

    从事iOS工作这么久了,我觉得对它的认识也越来越深刻.尤其是越发明白自己从事的工作属于“客户端开发”.“软件工程”分类中. 我更喜欢“客户端开发”这个词语,相对“前端开发”而言.因为前者更能充分说明面 ...

  8. 《编写高质量iOS与OS X代码的52个有效方法》书籍目录

    一.熟悉Objective-C 1.了解Objective-C语言的起源 2.在类的头文件中尽量少引入其他头文件 3.多用字面量语法,少用与之等价的方法 4.多用类型常量,少用#define预处理指令 ...

  9. 1 网页及浏览器内核&Web标准

    网页的组成: 主要由文字.图像和超链接等元素构成,还可以包含音频.视频以及flash. 浏览器内核: 浏览器内核分为两部分: 1 渲染引擎(layout engineer) 渲染引擎负责取得网页的内容 ...

  10. 使用c#调用API入门

    使用C#调用windows API入门 一:入门,直接从 C# 调用 DLL 导出   其实我们的议题应该叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2 ...