反编译代码格式处理

反编译代码格式处理

  • 背景
  • 解决方案
    • 程序跑之后
    • idea格式化
  • 总结

背景

想看看公司里一个工具的代码实现,手里只有一个jar包,只能通过jd-gui反编译代码。但是呢,源码是有了,但是看的很难受。
在这里插入图片描述

解决方案

/*** 替换 {@code searchDir}中所有remark信息,以及空行   用于解决源码反编译处理费代码* @param searchDir*/
public static void removeRemarkLine(String searchDir){File directory = new File(searchDir);if (directory.isDirectory()) {File[] files = directory.listFiles();if (files != null) {for (File file : files) {if (file.isDirectory()) {removeRemarkLine(file.getAbsolutePath());} else if (file.getName().endsWith(".java")) {removeCommentsAndEmptyLines(file.getAbsolutePath());}}}}
}public static void removeCommentsAndEmptyLines(String filePath) {try {List<String> modifiedLines = new ArrayList<>();BufferedReader reader = new BufferedReader(new FileReader(filePath));String line;StringBuilder sb = new StringBuilder();boolean commentStart = false;while ((line = reader.readLine()) != null) {sb.setLength(0);// 每一行逐个字符匹配, 碰到  /* 标记注释开头    碰到  */ 丢弃范围内的东西for (int i=0; i<line.length(); i++){if (line.charAt(i) == '/' && i != line.length() - 1 && line.charAt(i+1) == '*'){commentStart = true;i++;continue;}if (commentStart && line.charAt(i) == '/' && i != 0 && line.charAt(i-1) == '*'){commentStart = false;continue;}if (!commentStart){sb.append(line.charAt(i));}}line = sb.toString();if (line.trim().isEmpty()){continue;}
//                modifiedLines.add(line.trim());modifiedLines.add(line);}reader.close();BufferedWriter writer = new BufferedWriter(new FileWriter(filePath));for (String modifiedLine : modifiedLines) {writer.write(modifiedLine);writer.newLine();}writer.close();} catch (IOException e) {e.printStackTrace();}
}

试了一下,基本没啥问题。能看了,但是呢,和idea格式化后的感觉还是有点差异。

程序跑之后

在这里插入图片描述

idea格式化

在这里插入图片描述

总结

只能看,但还是想看idea格式化后的。但是,实现起来好像有点复杂,看后续能不能实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 100231.超过阈值的最少操作数 I

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一次操作中&#xff0c;你可以删除 nums 中的最小元素。 你需要使数组中的所有元素都大于或等于 k &#xff0c;请你返回需要的 最少 操作次数。 示例 1&#xff1a; 输入&#xff1a;nums [2,11,10,1,3], k 10 输…

Linux课程四课---Linux开发环境的使用(自动化构建工具-make/Makefile的相关)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

用Java语言创建的Spring Boot项目中,如何传递数组呢??

问题&#xff1a; 用Java语言创建的Spring Boot项目中&#xff0c;如何传递数组呢&#xff1f;&#xff1f; 在这个思路中&#xff0c;其实&#xff0c;Java作为一个后端开发的语言&#xff0c;没必要着重于如何传入&#xff0c;我们主要做的便是对传入的数组数据进行处理即可…

解决虚拟机启动报错:“End kernel panic - not syncing: attempted to kill the idle task”

原本能正常运行的虚拟机&#xff0c;很长一段时间没用后&#xff0c;今天再次启动&#xff0c;然后就出现下面的问题&#xff1a; 然后走了一些弯路&#xff0c;比如说删除该虚拟机然后新建一个虚拟机&#xff08;问题未解决&#xff09;、直接删除VitualBox重新安装&#xff0…

感染了后缀为.faust勒索病毒如何应对?数据能够恢复吗?

导言&#xff1a; 在网络安全领域&#xff0c;.faust勒索病毒是近期备受关注的一种恶意软件。这种病毒采用高度复杂的加密算法&#xff0c;将受感染计算机上的文件全部加密&#xff0c;并要求受害者支付赎金以获取解密密钥。.faust勒索病毒的攻击方式通常是通过电子邮件附件、…

快递平台独立版小程序源码|带cps推广营销流量主+前端

源码介绍&#xff1a; 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&#xff0c;极兔&#xff0c;德邦等&#xff0c;功能成熟 如何收益: 1.对接第三方平台成本大约4元…

Python基本数据类型介绍

Python 解释 Python是一种高级编程语言&#xff0c;以其简洁、易读和易用而闻名。它是一种通用的、解释型的编程语言&#xff0c;适用于广泛的应用领域&#xff0c;包括软件开发、数据分析、人工智能等。python是一种解释型&#xff0c;面向对象、动态数据类型的高级程序设计…

00X集——vba获取CAD图中图元类名objectname

在CAD中&#xff0c;通过快捷键PL&#xff08;即POLYLINE命令&#xff09;绘制的线属于AcDbPolyline。AcDbPolyline也被称为LWPOLYLINE&#xff0c;即简单Polyline&#xff0c;它所包含的对象在本身内部。 此外&#xff0c;CAD中还有另一种二维多段线对象&#xff0c;称为AcDb2…

ViewModel 原理

在现代Android应用开发中&#xff0c;ViewModel是架构组件库的一个关键部分&#xff0c;它在提高应用的稳定性和性能方面发挥着重要作用。在这篇文章中&#xff0c;我们将深入探讨ViewModel的工作原理和最佳实践。 ViewModel简介 ViewModel是Android Jetpack架构组件的一部分…

ubuntu安裝Avahi发现服务工具

一、简介 解决设置固定ip后无法连接外网的问题&#xff0c;目前采用动态获取ip&#xff0c;可以不用设置设备的固定IP&#xff0c;直接可以通过域名来访问设备&#xff0c;类似树莓派的连接调试 二、安装 本文使用的是ubuntu23.10.1上安装 1.安装工具 sudo apt install av…

2.模拟问题——4.日期问题

日期问题难度并不大&#xff0c;但是代码量非常大&#xff0c;需要较高的熟练度&#xff0c;因此需要着重练习&#xff0c;主要涉及数组和循环两个方面的知识点&#xff0c;需要熟练的测试代码。 两个经典题型 闰年 闰年满足以下两个条件的任意一个 能够被400整除不能够被1…

MyBatis拦截器实现打印完整SQL语句

我们在执行语句的时候会使用Mybatis自带的日志打印工具&#xff0c;但是打印的时候参数会用?代替&#xff0c;显得看起来不是那么直观&#xff0c;所以通过实现了InnerInterceptor接口&#xff0c;并重写了beforeQuery和beforeUpdate方法。在这两个方法中&#xff0c;它会获取…

【Acwing】差分矩阵

图1&#xff1a;a和b数组映射表 由于a是b的前缀和数组&#xff0c;因此改变b[ x1][ y1]之后&#xff0c;受到影响的a中元素如右半图所示 图2&#xff1a;求b数组的前缀和 #include<bits/stdc.h> using namespace std;int n,m,q; int a[1010][1010]; int b[1010][1010]…

work 3/1

1>机械臂 #include <head.h> #define SER_POTR 8899 #define SER_IP "192.168.125.223" int main(int argc, const char *argv[]) {//创建套接字int cfdsocket(AF_INET,SOCK_STREAM,0);if(cfd-1){perror("");return -1;}//链接struct sockaddr_i…

一文搞懂浏览器缓存机制

文章目录 概述强制缓存协商缓存总结参考文章 概述 浏览器的缓存机制也就是我们说的HTTP缓存机制&#xff0c;其机制是根据HTTP报文的缓存标识进行的 浏览器第一次向服务器发送HTTP请求, 浏览器拿到请求结果后&#xff0c;会根据响应报文的缓存标识&#xff0c;决定是否进行缓存…

机器学习:数据处理基操

在处理完数据之后&#xff0c;选择好模型&#xff0c;就可以用训练集训练模型&#xff0c;用测试集输入模型 然后输出需要预测的结果啦&#xff5e; 一、模块导入 import numpy as np import pandas as pd #读入数据 二、pandas数据 一、dataframe基础 一、dataframe的创建…

github新手使用详解及环境搭建案例

对于 GitHub 的新手使用以及环境搭建&#xff0c;以下是详细的步骤和案例&#xff1a; 一、GitHub 新手使用详解 注册 GitHub 账号&#xff1a;首先&#xff0c;你需要在 GitHub 官网上注册一个账号。填写必要的个人信息&#xff0c;如用户名、邮箱和密码等。注册完成后&…

【代码】Android|判断asserts下的文件存在与否,以及普通文件存在与否

作者版本&#xff1a;Android 11及以上 主要是发现网上没有完整的、能跑的代码&#xff0c;不知道怎么回事&#xff0c;GPT给我重写的。我只能保证这个代码尊嘟能跑&#xff0c;不像其他的缺胳膊少腿的。 asserts 贴一下结果&#xff1a; boolean isAssertFileExists(String …

Nginx配置php起WoWSimpleRegistration服务

WoWSimpleRegistration服务的git地址&#xff1a; GitHub - TrinityCore/WoWSimpleRegistration: Simple Registration page for TrinityCore/AzerothCore/AshamaneCore/CMangos 下载WoWSimpleRegistration 首先git下载&#xff1a; git clone https://github.com/TrinityC…

kafka消费者接收不到消息

背景&#xff1a; 对kafka消息进行监听&#xff0c;生产者发了消息&#xff0c;但是消费端没有接到消息&#xff0c;监听代码 消费端&#xff0c;kafka配置 spring.kafka.bootstrap-serverskafka.cestc.dmp:9591 spring.kafka.properties.sasl.jaas.configorg.apache.kafka.…