下别人的原来链接..... 支持效果不好要想格式化好需要解析语法树   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 = -; //开始截取下标
while(slashMatcher.find()) {
int indexEnd = slashMatcher.start();
String tmp = string.substring(indexHome+,indexEnd); //获取"号前面的数据
if(indexHome == - ||bool == false){
sb.append(tmp);
bool = true;
indexHome = indexEnd;
}else{
if(bool){
String tem2 = "";
for( int i=indexEnd- ; i>- ; i-- ){
char c = string.charAt(i);
if(c == '\\'){
tem2 += c;
}else{
break;
}
}
int tem2Len = tem2.length();
if(tem2Len>-){
//结束符前有斜杠转义符 需要判断转义个数奇偶 奇数是转义了 偶数才算是结束符号
if(tem2Len % ==){
//奇数 非结束符
}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+,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=;i<arr.length;i++){
String t = arr[i];
result.append(t.trim());
if(t.indexOf("//")!=- && "\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=;i<arr.length;i++){
String tem = arr[i].trim();
if(tem.indexOf("{")!=-){
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("}")!=-){
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;
} }

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. js缓慢运动,Math.ceil向上取整,floor向下取整

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. static在c\c++中的作用(翁恺c++公开课[28-29]学习笔记)

    static相对来说是一个较复杂的修饰符,c++中的static在c的基础之上又包含了static在类中的应用(也就是说多了static的成员变量和static的成员函数):c\c++中静态变量.对象 ...

  3. NOIP2019 旅行

    注意!注意!前方高能!本题卡常!!! 我们发现,所有的狗血剧情都在告诉我们,树的话直接dfs就出来了 那么基环树呢? 其实只要暴力删边,理论上的复杂度是可以过的qwq 但是删哪条边呢? 这里要引出一个 ...

  4. Windows XP 常用DOS命令

      winver 检查Windows版本 wmimgmt.msc 打开windows管理体系结构(WMI) wupdmgr windows更新程序 wscript windows脚本宿主设置 writ ...

  5. Python之第一次自夸

    有一个好玩的代码 import win32com.client g = win32com.client.Dispatch("SAPI.SPVOICE") g.Speak(" ...

  6. VS2010如何在同一个解决方案下建立多个项目以及切换运行不同项目

    前言: 在编一些小程序时,往往我们不需要一个问题就建立一个解决方案,我们完全可以让多个项目放在同一个解决方案下,切换启动项运行即可.接下来介绍具体的步骤 一.建立空白解决方案以及添加新项目 1.先建立 ...

  7. VMware安装CentOS操作系统详细步骤

    目录 创建虚拟机(买电脑) 1. 创建新虚拟机 2. 自定义配置虚拟机 3. 选择虚拟机硬件兼容性 4. 安装虚拟机创建系统 5. 选择虚拟机操作系统 6. 设置虚拟机名字和存放位置 7. 设置虚拟机 ...

  8. C#往TextBox的方法AppendText加入的内容里插入换行符----转载

    C# TextBox换行[huan hang]时你往往会想到直接付给一个含有换行[huan hang]符"\n"的字符[zi fu]串[zi fu chuan]给Text属性[sh ...

  9. GPU运行Tensorflow的几点建议

    1.在运行之前先查看GPU的使用情况: 指令:nvidia-smi 备注:查看GPU此时的使用情况 或者 指令:watch nvidia-smi 备注:实时返回GPU使用情况 2.指定GPU训练: 方 ...

  10. 插入和查询HBase速度都比较慢

    表层问题:插入和查询HBase速度比较慢 排查一,查看HBase节点状态,发现正常运行: 排查二,查看访问HBase服务的状态,发现服务停止: 依次点击服务实例,查看服务状态 133和135节点上的服 ...